Con Android 8.0 (nivel de API 26) y versiones posteriores, puedes indicarle a un
TextView
para permitir el tamaño del texto
expandir o contraer automáticamente
para completar el diseño según el
Características y límites de TextView
Este parámetro de configuración hace que sea más fácil
optimizar el tamaño del texto en diferentes pantallas con contenido dinámico.
La biblioteca de compatibilidad 26.0 es totalmente compatible con el ajuste automático de tamaño de TextView
.
en dispositivos con Android 8.0 (nivel de API 26) o versiones anteriores.
El paquete android.support.v4.widget
contiene TextViewCompat
.
para acceder a funciones de manera retrocompatible.
Cómo configurar el tamaño automático de TextView
Puedes usar el framework o la biblioteca de compatibilidad para configurar el ajuste automático de tamaño de
TextView
de manera programática o en XML. Para configurar los atributos XML, también puedes usar la ventana Properties en Android Studio.
Existen tres formas de configurar el ajuste automático de tamaño de TextView
:
que se describen en las siguientes secciones:
Nota: Si configuras el ajuste automático de tamaño en un archivo en formato XML, no
se recomienda usar el valor "wrap_content" para el
Los atributos layout_width
o layout_height
de un
TextView
Hacerlo puede producir
resultados inesperados.
Predeterminado
La configuración predeterminada permite que el ajuste automático de tamaño de la escala TextView
uniformemente en los ejes horizontales y verticales.
- Para definir la configuración predeterminada de forma programática, llama al
setAutoSizeTextTypeWithDefaults(int autoSizeTextType)
. ProporcionaAUTO_SIZE_TEXT_TYPE_NONE
para desactivar la función de ajuste automático de tamaño oAUTO_SIZE_TEXT_TYPE_UNIFORM
para escalar los ejes horizontal y vertical de manera uniforme. - Para definir la configuración predeterminada en XML, usa el espacio de nombres
android
. y configura el el atributoautoSizeTextType
a none o uniforme.
Nota: Las dimensiones predeterminadas para el escalamiento uniforme son minTextSize = 12sp
, maxTextSize = 112sp
y granularity = 1px.
.
<?xml version="1.0" encoding="utf-8"?> <TextView android:layout_width="match_parent" android:layout_height="200dp" android:autoSizeTextType="uniform" />
Cómo definir la configuración predeterminada con la biblioteca de compatibilidad
- Para definir la configuración predeterminada de forma programática a través de la biblioteca de compatibilidad, haz lo siguiente:
Llamar a
TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType)
. Proporciona una instancia del widgetTextView
y uno de los tipos de texto. comoTextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE
oTextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
- Para definir la configuración predeterminada en XML a través de la biblioteca de compatibilidad, usa el elemento
Espacio de nombres
app
y configura elautoSizeTextType
atributo a none o uniform.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="200dp" app:autoSizeTextType="uniform" /> </LinearLayout>
Nivel de detalle
Puedes definir un rango de tamaños de texto mínimo y máximo, y una dimensión que especifique el tamaño de cada paso. TextView
escala de manera uniforme en un rango entre los atributos de tamaño mínimo y máximo. Cada incremento ocurre como el paso
establecido en el atributo de nivel de detalle.
- Para definir un rango de tamaños de texto y una dimensión de forma programática, llama al método
setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
. Proporciona el valor máximo, el valor mínimo y el nivel de detalle y cualquierTypedValue
unidad de dimensión. - Para definir un rango de tamaños de texto y una dimensión en XML, usa
android
. y configura los siguientes atributos:- Establece el
autoSizeTextType
atributo a none o uniform. El valor none es el valor predeterminado, y uniforme permiteTextView
escalan de manera uniforme en horizontal y los ejes verticales. - Establece el
autoSizeMinTextSize
.autoSizeMaxTextSize
, yautoSizeStepGranularity
para definir las dimensiones del ajuste automático de tamañoTextView
- Establece el
<?xml version="1.0" encoding="utf-8"?> <TextView android:layout_width="match_parent" android:layout_height="200dp" android:autoSizeTextType="uniform" android:autoSizeMinTextSize="12sp" android:autoSizeMaxTextSize="100sp" android:autoSizeStepGranularity="2sp" />
Cómo definir el nivel de detalle con la biblioteca de compatibilidad
- Para definir un rango de tamaños de texto y una dimensión de forma programática a través de la
Support Library llama al
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
. Proporciona el valor máximo, el valor mínimo, el valor de detalle y cualquier unidad de dimensiónTypedValue
. - Para definir un rango de tamaños de texto y una dimensión en XML a través de la página de asistencia
biblioteca, usa el espacio de nombres
app
y configura laautoSizeText
,autoSizeMinTextSize
autoSizeMaxTextSize
y AtributosautoSizeStepGranularity
en el archivo en formato XML de diseño
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="200dp" app:autoSizeTextType="uniform" app:autoSizeMinTextSize="12sp" app:autoSizeMaxTextSize="100sp" app:autoSizeStepGranularity="2sp" /> </LinearLayout>
Tamaños predeterminados
Los tamaños predeterminados te permiten especificar los valores
TextView
elige cuando se ajusta automáticamente el tamaño del texto.
-
Llama al método
setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit)
para usar los tamaños predeterminados con el objetivo de configurar el ajuste automático de tamaño deTextView
de forma programática. Proporciona un arreglo de tamaños y cualquier unidad de dimensiónTypedValue
para el tamaño. -
Para usar tamaños predeterminados a fin de configurar el ajuste automático de tamaño de
TextView
en XML, usa el espacio de nombresandroid
y configura los siguientes atributos:- Establece el
autoSizeTextType
. atributo a none o uniform. El valor none es el valor predeterminado, y uniform permiteTextView
escalan de manera uniforme en horizontal y los ejes verticales. - Configura el atributo
autoSizePresetSizes
en un arreglo de tamaños predeterminados. Para acceder al arreglo como un recurso, defínelo en el archivores/values/arrays.xml
.
- Establece el
<resources> <array name="autosize_text_sizes"> <item>10sp</item> <item>12sp</item> <item>20sp</item> <item>40sp</item> <item>100sp</item> </array> </resources>
<?xml version="1.0" encoding="utf-8"?> <TextView android:layout_width="match_parent" android:layout_height="200dp" android:autoSizeTextType="uniform" android:autoSizePresetSizes="@array/autosize_text_sizes" />
Cómo configurar tamaños predeterminados con la biblioteca de compatibilidad
- Para usar tamaños predeterminados y configurar el ajuste automático de tamaño
TextView
de manera programática a través de la biblioteca de compatibilidad, llama alTextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit)
. Proporciona una instancia de la claseTextView
, un array de tamaños y cualquier unidad de dimensiónTypedValue
para el tamaño. - Para usar tamaños predeterminados y configurar el ajuste automático de tamaño
TextView
en XML a través de la biblioteca de compatibilidad, usa el elementoapp
y configura los elementosautoSizeTextType
yautoSizePresetSizes
del archivo en formato XML de diseño.
<resources> <array name="autosize_text_sizes"> <item>10sp</item> <item>12sp</item> <item>20sp</item> <item>40sp</item> <item>100sp</item> </array> </resources>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="200dp" app:autoSizeTextType="uniform" app:autoSizePresetSizes="@array/autosize_text_sizes" /> </LinearLayout>
Recursos adicionales
Para obtener información adicional sobre el ajuste automático del tamaño de un TextView
cuando se trabaja con
contenido, mirar
Android Jetpack: Cómo ajustar automáticamente el tamaño de TextView.