Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Ajuste automático de tamaño de TextView

Con Android 8.0 (API nivel 26) y versiones posteriores, puedes darle instrucciones a TextView para que el tamaño del texto se expanda o se contraiga automáticamente a fin de rellenar su diseño según las características y los límites de TextView. Esta configuración facilita la optimización del tamaño del texto en diferentes pantallas con contenido dinámico.

La biblioteca de compatibilidad 26.0 brinda soporte completo para la función TextView de ajuste automático de tamaño en dispositivos con versiones de Android anteriores a la 8.0 (API nivel 26). La biblioteca ofrece compatibilidad para Android 4.0 (API nivel 14) y versiones posteriores. El paquete android.support.v4.widget contiene la clase TextViewCompat para acceder a las funciones de manera retrocompatible.

Cómo configurar el ajuste automático de tamaño de TextView

Puedes usar un marco de trabajo o una biblioteca de compatibilidad para configurar el ajuste automático de TextView de forma 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:

Nota: Si configuras el ajuste automático de tamaño en un archivo XML, no se recomienda usar el valor "wrap_content" para los atributos layout_width o layout_height de un TextView. Puede producir resultados inesperados.

Predeterminado

La configuración predeterminada permite que el ajuste automático de tamaño de TextView escale de manera uniforme en los ejes horizontal y vertical.

  • Para definir la configuración predeterminada de forma programática, llama al método 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 de manera uniforme en los ejes horizontal y vertical.
  • 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 atributo autoSizeTextType en none o uniform.
  •     <?xml version="1.0" encoding="utf-8"?>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:autoSizeTextType="uniform" />
        

Cómo usar la biblioteca de compatibilidad

  • Para definir la configuración predeterminada de forma programática mediante la biblioteca de compatibilidad, llama al método 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 espacio de nombres app y configura el atributo autoSizeTextType en 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 según el tamaño del paso configurado en el atributo de nivel de detalle.

Cómo usar 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 biblioteca de compatibilidad, llama al método TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit). Proporciona el valor máximo, el valor mínimo, el valor de nivel 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 biblioteca de compatibilidad, usa el espacio de nombres app y configura los atributos autoSizeText, autoSizeMinTextSize, autoSizeMaxTextSize y autoSizeStepGranularity en el archivo 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 todos los valores que TextView selecciona cuando ajusta automáticamente el tamaño del texto.

  • Para usar los tamaños predeterminados con el objetivo de configurar el ajuste automático de tamaño de TextView de forma programática, llama al método setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit). 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:
    • Configura el atributo autoSizeText en none o uniform. none es un valor predeterminado y uniform permite que TextView escale de manera uniforme los ejes horizontal y vertical.
    • 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 usar la biblioteca de compatibilidad

  • Para usar tamaños predeterminados a fin de configurar el ajuste automático de tamaño de TextView de forma programática a través de la biblioteca de compatibilidad, llama al método TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit). Proporciona una instancia de la clase TextView, un arreglo de tamaños y cualquier unidad de dimensión TypedValue para el tamaño.
  • Para usar ajustes predeterminados a fin de configurar el ajuste automático de tamaño de TextView en XML a través de la biblioteca de compatibilidad, usa el espacio de nombres app y configura los atributos autoSizeText y autoSizePresetSizes en el archivo 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 trabajes con contenido dinámico, mira el video Ajuste automático de tamaño de TextView.