CollapsingToolbarLayout
Yazı tipi boyutunu ve yazı tipini değiştirmek istiyorum . Bunu nasıl başarabilirim?
Yanıtlar:
Koda dalmadan önce ilk önce textSize
bizim için karar verelim CollapsingToolbarLayout
. Google adlı bir web sitesi yayınladı material.io
, bu web sitesi aynı zamanda Tipografi ile nasıl başa çıkılacağını açıklıyor .
Makalede, kullanılması önerilen yazı tipi boyutunu da açıklayan "Başlık" kategorisinden bahsediliyor sp
.
Makale tavsiye bahsetmedi rağmen CollapsingToolbarLayout's
genişletilmiş boyut ama kütüphane com.android.support:design
bir sağlar TextAppearance
bizim durumumuzda için. Kaynakla biraz kazı yapıldığında, boyutun 34sp
(makalede belirtilmemiştir) olduğu ortaya çıktı .
Peki ya daraltılmış boyut? Neyse ki makale bir şeyden bahsetti ve öyle 20sp
.
Ve en iyi TextAppearance
yer uyuyor bugüne kadar olduğu collpased modda olduğu TextAppearance.AppCompat.Title
bizim ise genişletilmiş mod TextAppearance
olduğunu TextAppearance.Design.CollapsingToolbar.Expanded
.
Tüm örneklerimizi gözlemlerseniz, hepsinin , belirli gereksinimleriniz olmadıkça görevi yerine getireceğini söylemek güvenli olan yazı tipinin DÜZENLİ versiyonunu kullanır Roboto regular
.
Yazı tiplerini indirmek çok fazla iş olabilir, neden gerekli tüm Roboto yazı tiplerini içeren bir kitaplık kullanmayasınız? Bu yüzden Roboto için bir kaligrafi kitaplığı tanıtıyorum, örneğin Typer .
dependencies {
implementation 'com.android.support:design:28.0.0'
implementation 'com.rhexgomez.typer:typer-roboto:2.0.0'
}
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:expandedTitleTextAppearance="@style/TextAppearance.Design.CollapsingToolbar.Expanded"
app:collapsedTitleTextAppearance="@style/TextAppearance.AppCompat.Title"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
// Java example
CollapsingToolbarLayout collapsingToolbar = findViewById(R.id.collapsing_toolbar);
collapsingToolbar.setCollapsedTitleTypeface(TyperRoboto.ROBOTO_REGULAR());
collapsingToolbar.setExpandedTitleTypeface(TyperRoboto.ROBOTO_REGULAR());
// Kotlin example
collapsing_toolbar.apply {
setCollapsedTitleTypeface(TyperRoboto.ROBOTO_REGULAR)
setExpandedTitleTypeface(TyperRoboto.ROBOTO_REGULAR)
}
Bu, Typer kitaplığı güncellendiği için bir 2019 güncellemesidir! Ben de kütüphanenin yazarıyım.
CollapsingToolbarLayout
Daraltılmış ve genişletilmiş başlığın yazı tipini ayarlamak için yeni genel yöntemleri kullanabilirsiniz , örneğin:
final Typeface tf = Typeface.createFromAsset(context.getAssets(), "fonts/FrutigerLTStd-Light.otf");
collapsingToolbar.setCollapsedTitleTypeface(tf);
collapsingToolbar.setExpandedTitleTypeface(tf);
Bu, 23.1.0 tasarım destek kitaplığına eklenmiş gibi görünüyor ve çok hoş bir ek.
setTitle(String)
yöntemi kullanabilirsiniz CollapsingToolbarLayout
.
Bunun gibi bir şey yapabilirsiniz:
mCollapsingToolbarLayout.setTitle(getTitle());
mCollapsingToolbarLayout.setExpandedTitleTextAppearance(R.style.ExpandedAppBar);
mCollapsingToolbarLayout.setCollapsedTitleTextAppearance(R.style.CollapsedAppBar);
İlgili metin görüntüleme stili şunlar olabilir:
<style name="ExpandedAppBar" parent="@android:style/TextAppearance.Medium">
<item name="android:textSize">28sp</item>
<item name="android:textColor">#000</item>
<item name="android:textStyle">bold</item>
</style>
<style name="CollapsedAppBar" parent="@android:style/TextAppearance.Medium">
<item name="android:textSize">24sp</item>
<item name="android:textColor">@color/white</item>
<item name="android:textStyle">normal</item>
</style>
ayrıca referans için buraya bakın .
Toolbar.setTitleTextColor()
ya app:titleTextColor
ait Toolbar
doesnt değişikliği araç çubuğunun başlık rengi etrafı sarıldığındaCollapsingToolbarLayout
CollapsingToolbarLayout toolbar_layout =findViewById(R.id.toolbar_layout); toolbar_layout.setExpandedTitleColor(Color.BLACK);
mCollapsingToolbar.setTitle(getTitle());
mCollapsingToolbar.setExpandedTitleTextAppearance(R.style.ExpandedAppBar);
mCollapsingToolbar.setCollapsedTitleTextAppearance(R.style.CollapsedAppBar);
<style name="ExpandedAppBar" parent="@android:style/TextAppearance.Medium">
<item name="android:textSize">28sp</item>
<item name="android:textColor">#000</item>
<item name="android:textStyle">bold</item>
</style>
<style name="CollapsedAppBar" parent="@android:style/TextAppearance.Medium">
<item name="android:textSize">24sp</item>
<item name="android:textColor">@color/white</item>
<item name="android:textStyle">normal</item>
</style>
<style name="ExpandedAppBarPlus1" parent="@android:style/TextAppearance.Medium">
<item name="android:textSize">28.5sp</item>
<item name="android:textColor">#000</item>
<item name="android:textStyle">bold</item>
</style>
<style name="CollapsedAppBarPlus1" parent="@android:style/TextAppearance.Medium">
<item name="android:textSize">24.5sp</item>
<item name="android:textColor">@color/white</item>
<item name="android:textStyle">normal</item>
</style>
Referans burada CollapsingToolbarLayout setTitle düzgün çalışmıyor
Buradaki tüm cevaplara eklemek için, AppTheme'de, stillere atıfta bulunarak, nereye başvurmaya çalışsam da xml'de benim için işe yaramadı. Şu anda 27.1.1 destek kitaplığını kullanıyorum
Yalnızca programatik olarak çalıştı.
Typeface typeface = ResourcesCompat.getFont(this, R.font.my_custom_font);
collapsingToolbarLayout.setCollapsedTitleTypeface(typeface);
collapsingToolbarLayout.setExpandedTitleTypeface(typeface);
Görünüşe göre bir çözümüm var:
private void makeCollapsingToolbarLayoutLooksGood(CollapsingToolbarLayout collapsingToolbarLayout) {
try {
final Field field = collapsingToolbarLayout.getClass().getDeclaredField("mCollapsingTextHelper");
field.setAccessible(true);
final Object object = field.get(collapsingToolbarLayout);
final Field tpf = object.getClass().getDeclaredField("mTextPaint");
tpf.setAccessible(true);
((TextPaint) tpf.get(object)).setTypeface(Typeface.createFromAsset(getAssets(), "Roboto-Bold.ttf"));
((TextPaint) tpf.get(object)).setColor(getResources().getColor(R.color.ice));
} catch (Exception ignored) {
}
}
Kod burada
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsingToolbarLayout"
android:layout_width="match_parent"
app:expandedTitleTextAppearance="@style/Toolbar.TitleText"
app:collapsedTitleTextAppearance="@style/Toolbar.TitleText"
android:layout_height="match_parent"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginStart="@dimen/expanded_toolbar_title_margin_start"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
CollapsingToolbarLayout düzenine bu kod satırlarını ekleyin
app:expandedTitleTextAppearance="@style/Toolbar.TitleText"
app:collapsedTitleTextAppearance="@style/Toolbar.TitleText"
Aşağıda, style.xml'de verilen kod
<style name="Toolbar.TitleText" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
<item name="android:textSize">16sp</item>
</style>
Yazı tipi boyutunu veya ebeveyni değiştirin.
<style name="expandedappbar" parent="@android:style/TextAppearance.Medium"> //Change Medium to Small
<item name="android:textSize">28sp</item> <!--Or Change the font size -->
<item name="android:textColor">@color/white</item>
<item name="android:textStyle">bold</item>
</style>
<style name="collapsedappbar" parent="@android:style/TextAppearance.Medium">
<item name="android:textSize">18sp</item>
<item name="android:textColor">@color/white</item>
</style>
Artık yazı tiplerini kaynak olarak tanımlayabilirsiniz https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html
res-> font->
klasöre
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
<font
android:fontStyle="normal"
android:fontWeight="400"
android:font="@font/lobster_regular" />
<font
android:fontStyle="italic"
android:fontWeight="400"
android:font="@font/lobster_italic" />
</font-family>
sonraki set
val typeface = ResourcesCompat.getFont(this, R.font.lobster_regular)
htab_collapse_toolbar.setCollapsedTitleTypeface(typeface)
htab_collapse_toolbar.setExpandedTitleTypeface(typeface)