Cómo ajustar automáticamente el tamaño de TextViews

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) . Proporciona AUTO_SIZE_TEXT_TYPE_NONE para desactivar la función de ajuste automático de tamaño o AUTO_SIZE_TEXT_TYPE_UNIFORM para escalar los ejes horizontal y vertical de manera uniforme.
  • Nota: Las dimensiones predeterminadas para el escalamiento uniforme son minTextSize = 12sp, maxTextSize = 112sp y granularity = 1px..

  • Para definir la configuración predeterminada en XML, usa el espacio de nombres android. y configura el el atributo autoSizeTextType a none o uniforme.
  • <?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 widget TextView y uno de los tipos de texto. como TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE o TextViewCompat.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 el autoSizeTextType 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 cualquier TypedValue 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 permite TextView escalan de manera uniforme en horizontal y los ejes verticales.
    • Establece el autoSizeMinTextSize. autoSizeMaxTextSize, y autoSizeStepGranularity para definir las dimensiones del ajuste automático de tamaño TextView
  • <?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ón TypedValue.
  • 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 la autoSizeText, autoSizeMinTextSize autoSizeMaxTextSize y Atributos autoSizeStepGranularity 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 de TextView de forma programática. Proporciona un arreglo de tamaños y cualquier unidad de dimensión TypedValue 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 nombres android y configura los siguientes atributos:
    • Establece el autoSizeTextType. atributo a none o uniform. El valor none es el valor predeterminado, y uniform permite TextView 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 archivo res/values/arrays.xml.
  • <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 al TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit) . Proporciona una instancia de la clase TextView, un array de tamaños y cualquier unidad de dimensión TypedValue 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 elemento app y configura los elementos autoSizeTextType y autoSizePresetSizes 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.