Ich möchte die CollapsingToolbarLayout
Schriftgröße und die Schriftart ändern . Wie kann ich das erreichen?
Antworten:
Bevor wir uns mit dem Code befassen, entscheiden wir uns zunächst textSize
für unseren CollapsingToolbarLayout
. Google hat eine Website mit dem Namen material.io
veröffentlicht. Auf dieser Website wird auch der beste Umgang mit Typografie erläutert .
Der Artikel erwähnte die Kategorie "Überschrift", in der auch die empfohlene Schriftgröße erläutert wird sp
.
Der Artikel erwähnte zwar nie die empfohlene CollapsingToolbarLayout's
erweiterte Größe, aber die Bibliothek com.android.support:design
bietet eine TextAppearance
für unseren Fall. Beim Graben mit der Quelle stellt sich heraus, dass die Größe ist 34sp
(im Artikel nicht erwähnt).
Wie wäre es also mit der zusammengeklappten Größe? Zum Glück hat der Artikel etwas erwähnt und es ist 20sp
.
Und das Beste TextAppearance
, was bisher in den Collpased- Modus passt, ist, TextAppearance.AppCompat.Title
während unser erweiterter Modus TextAppearance
ist TextAppearance.Design.CollapsingToolbar.Expanded
.
Wenn Sie alle unsere Beispiele beachten, verwenden vor allem die REGELMÄSSIGE Version der Schriftart, die mit Sicherheit Roboto regular
die Aufgabe erledigt , es sei denn, Sie haben spezielle Anforderungen.
Das Herunterladen der Schriftarten selbst ist möglicherweise zu aufwändig. Verwenden Sie eine Bibliothek mit allen erforderlichen Roboto-Schriftarten. Also stelle ich eine Kalligraphiebibliothek für Roboto vor, zB 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)
}
Dies ist ein Update für 2019, da die Typer-Bibliothek aktualisiert wurde! Ich bin auch der Autor der Bibliothek.
Mit den neuen öffentlichen Methoden können Sie CollapsingToolbarLayout
die Schriftart für den reduzierten und erweiterten Titel wie folgt festlegen:
final Typeface tf = Typeface.createFromAsset(context.getAssets(), "fonts/FrutigerLTStd-Light.otf");
collapsingToolbar.setCollapsedTitleTypeface(tf);
collapsingToolbar.setExpandedTitleTypeface(tf);
Dies scheint in der Design Support Library 23.1.0 hinzugefügt worden zu sein und ist eine sehr willkommene Ergänzung.
setTitle(String)
Methode wahrscheinlich für die CollapsingToolbarLayout
Instanz verwenden.
Sie können so etwas tun:
mCollapsingToolbarLayout.setTitle(getTitle());
mCollapsingToolbarLayout.setExpandedTitleTextAppearance(R.style.ExpandedAppBar);
mCollapsingToolbarLayout.setCollapsedTitleTextAppearance(R.style.CollapsedAppBar);
Der entsprechende Textansichtsstil könnte sein: 28sp # 000 fett
<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>
siehe auch hier als Referenz.
Toolbar.setTitleTextColor()
oder app:titleTextColor
von Toolbar
doesnt ändert die Farbe des Titels der Symbolleiste , wenn eingeschlossen inCollapsingToolbarLayout
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>
Referenz hier CollapsingToolbarLayout setTitle funktioniert nicht richtig
Um alle Antworten hier hinzuzufügen, hat es in XML nicht funktioniert, egal wo ich versucht habe, in AppTheme auf Stile zu verweisen. Ich verwende derzeit die Support-Bibliothek 27.1.1
Es hat nur programmatisch funktioniert.
Typeface typeface = ResourcesCompat.getFont(this, R.font.my_custom_font);
collapsingToolbarLayout.setCollapsedTitleTypeface(typeface);
collapsingToolbarLayout.setExpandedTitleTypeface(typeface);
Sieht so aus, als hätte ich eine Lösung:
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) {
}
}
Code ist hier
<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">
Fügen Sie diese Codezeilen in das Layout CollapsingToolbarLayout ein
app:expandedTitleTextAppearance="@style/Toolbar.TitleText"
app:collapsedTitleTextAppearance="@style/Toolbar.TitleText"
Und der Code, der unten in style.xml angegeben ist
<style name="Toolbar.TitleText" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
<item name="android:textSize">16sp</item>
</style>
Ändern Sie die Schriftgröße oder das übergeordnete Element.
<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>
Jetzt können Sie Schriftarten als Ressource https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html definieren
res-> font->
Ordner ab<?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>
nächster Satz
val typeface = ResourcesCompat.getFont(this, R.font.lobster_regular)
htab_collapse_toolbar.setCollapsedTitleTypeface(typeface)
htab_collapse_toolbar.setExpandedTitleTypeface(typeface)