android - icon - ¿Cómo cambiar el tipo de letra y el tamaño de CollapsingToolbarLayout?
change toolbar color android programmatically (9)
Actualizar
Antes de sumergirnos en el código, primero decidamos el
textSize
para nuestro
CollapsingToolbarLayout
.
Google publicó un sitio web llamado
material.io
, este sitio web también explica la mejor manera de lidiar con la
Typography
.
El artículo menciona la categoría "Encabezado" que también explica el tamaño de fuente recomendado para usar en
sp
.
Aunque el artículo nunca mencionó el tamaño
expandido
recomendado de
CollapsingToolbarLayout''s
pero la biblioteca
com.android.support:design
proporciona una
TextAppearance
de
TextAppearance
para nuestro caso.
Al investigar un poco con la fuente, resulta que el tamaño es de
34sp
(no mencionado en el artículo).
Entonces, ¿qué tal el tamaño colapsado?
Afortunadamente, el artículo menciona algo y es
20sp
.
Y el mejor
TextAppearance
hasta ahora que se ajusta en modo
TextAppearance.AppCompat.Title
es
TextAppearance.AppCompat.Title
mientras que nuestro modo
expandido
TextAppearance
es
TextAppearance.Design.CollapsingToolbar.Expanded
.
Si observa todos nuestros ejemplos, todos utilizan la versión
REGULAR
de la fuente, lo que es seguro decir que
Roboto regular
hará la tarea a menos que tenga requisitos específicos.
Puede ser demasiado trabajo descargar las fuentes en sí, ¿por qué no usar una biblioteca que tenga todas las fuentes necesarias de Roboto? Así que presento una biblioteca de caligrafía para Roboto, por ejemplo, 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
// Java example
CollapsingToolbarLayout collapsingToolbar = findViewById(R.id.collapsing_toolbar);
collapsingToolbar.setCollapsedTitleTypeface(TyperRoboto.ROBOTO_REGULAR());
collapsingToolbar.setExpandedTitleTypeface(TyperRoboto.ROBOTO_REGULAR());
Kotlin
// Kotlin example
collapsing_toolbar.apply {
setCollapsedTitleTypeface(TyperRoboto.ROBOTO_REGULAR)
setExpandedTitleTypeface(TyperRoboto.ROBOTO_REGULAR)
}
¡Esta es una actualización de 2019 porque la biblioteca Typer está actualizada! También soy el autor de la biblioteca.
Android 8.0 (API nivel 26) ha introducido una nueva característica, Fuentes en XML
Ahora puede definir fuentes como recursos https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html
-
Ponga sus fuentes en
res-> font->
folder - Definir font.xml
<?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>
siguiente set
val typeface = ResourcesCompat.getFont(this, R.font.lobster_regular)
htab_collapse_toolbar.setCollapsedTitleTypeface(typeface)
htab_collapse_toolbar.setExpandedTitleTypeface(typeface)
Cambiar el tamaño de fuente o padre.
<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>
El código está aquí
<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">
Agregue estas líneas de código en el diseño CollapsingToolbarLayout
app:expandedTitleTextAppearance="@style/Toolbar.TitleText"
app:collapsedTitleTextAppearance="@style/Toolbar.TitleText"
Y el código que se da a continuación, en style.xml
<style name="Toolbar.TitleText" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
<item name="android:textSize">16sp</item>
</style>
Para agregar a todas las respuestas aquí, no funcionó para mí en xml sin importar dónde traté de aplicar, en AppTheme, hacer referencia a estilos. Actualmente estoy usando la biblioteca de soporte 27.1.1
Funcionó solo programáticamente.
Typeface typeface = ResourcesCompat.getFont(this, R.font.my_custom_font);
collapsingToolbarLayout.setCollapsedTitleTypeface(typeface);
collapsingToolbarLayout.setExpandedTitleTypeface(typeface);
Parece que tengo solución:
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) {
}
}
Puede usar los nuevos métodos públicos, en
CollapsingToolbarLayout
para establecer el tipo de letra para el título contraído y expandido, de esta manera:
final Typeface tf = Typeface.createFromAsset(context.getAssets(), "fonts/FrutigerLTStd-Light.otf");
collapsingToolbar.setCollapsedTitleTypeface(tf);
collapsingToolbar.setExpandedTitleTypeface(tf);
Esto parece haberse agregado en la biblioteca de soporte de diseño 23.1.0, y es una adición muy bienvenida.
Puedes hacer algo como esto:
mCollapsingToolbarLayout.setTitle(getTitle());
mCollapsingToolbarLayout.setExpandedTitleTextAppearance(R.style.ExpandedAppBar);
mCollapsingToolbarLayout.setCollapsedTitleTextAppearance(R.style.CollapsedAppBar);
El estilo de vista de texto correspondiente podría ser: 28sp # 000 negrita
<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>
También vea here para referencia.
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>
Consulte aquí CollapsingToolbarLayout setTitle no funciona correctamente