O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Dimensionamento automático do TextView

Com o Android 8.0 (API nível 26) e versões posteriores, é possível instruir um TextView para que o tamanho do texto se expanda ou se contraia automaticamente para preencher o layout com base nas características e limites do TextView. Essa configuração facilita a otimização do tamanho do texto em telas diferentes com conteúdo dinâmico.

A Biblioteca de Suporte 26.0 oferece compatibilidade total com o recurso de dimensionamento automático do TextView em dispositivos com versões do Android anteriores à 8.0 (API nível 26). A biblioteca oferece compatibilidade com o Android 4.0 (API nível 14) e versões posteriores. O pacote android.support.v4.widget contém a classe TextViewCompat para acessar recursos de maneira compatível com versões anteriores.

Configurar o dimensionamento automático do TextView

Você pode usar o framework ou a Biblioteca de Suporte para configurar o dimensionamento automático de TextView de forma programática ou em XML. Para definir os atributos XML, você também pode usar a janela Properties no Android Studio.

Existem três maneiras de configurar o dimensionamento automático de TextView:

Observação: ao configurar o dimensionamento automático em um arquivo XML, não é recomendado usar o valor "wrap_content" para os atributos layout_width ou layout_height de um TextView. Isso pode causar resultados inesperados.

Padrão

A configuração padrão permite que o dimensionamento automático de TextView seja realizado de maneira uniforme nos eixos horizontal e vertical.

  • Para definir a configuração padrão de forma programática, chame o método setAutoSizeTextTypeWithDefaults(int autoSizeTextType) . Forneça AUTO_SIZE_TEXT_TYPE_NONE para desativar o recurso de dimensionamento automático ou AUTO_SIZE_TEXT_TYPE_UNIFORM para dimensionar os eixos horizontal e vertical de maneira uniforme.
  • Observação: as dimensões padrão para o dimensionamento uniforme são minTextSize = 12sp, maxTextSize = 112sp e granularity = 1px..

  • Para definir a configuração padrão em XML, use o namespace android e defina o atributo autoSizeTextType como none ou uniform.
  •     <?xml version="1.0" encoding="utf-8"?>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:autoSizeTextType="uniform" />
        

Usar a Biblioteca de Suporte

  • Para definir a configuração padrão de forma programática por meio da Biblioteca de Suporte, chame o método TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType). Forneça uma instância do widget TextView e um dos tipos de texto, como TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE ou TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM.
  • Para definir a configuração padrão em XML por meio da Biblioteca de Suporte, use o namespace app e defina o atributo autoSizeTextType como none ou 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>
        

Granularidade

Você pode definir um intervalo de tamanhos mínimo e máximo de texto e uma dimensão que especifique o tamanho de cada etapa. O TextView é dimensionado de maneira uniforme em um intervalo entre os atributos de tamanho mínimo e máximo. Cada incremento ocorre conforme o tamanho da etapa definido no atributo de granularidade.

Usar a biblioteca de suporte

  • Para definir um intervalo de tamanhos de texto e uma dimensão de forma programática por meio da Biblioteca de Suporte, chame o método TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit). Forneça os valores máximo, mínimo, de granularidade, bem como qualquer unidade de dimensão TypedValue.
  • Para definir um intervalo de tamanhos de texto e uma dimensão em XML por meio da Biblioteca de Suporte, use o namespace app e configure os atributos autoSizeText, autoSizeMinTextSize, autoSizeMaxTextSize e autoSizeStepGranularity no arquivo XML de layout.
  •     <?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>
        

Tamanhos predefinidos

Com os tamanhos predefinidos, é possível especificar todos os valores que TextView seleciona quando o texto é dimensionado automaticamente.

  • Para usar os tamanhos predefinidos para configurar o dimensionamento automático de TextView de forma programática, chame o método setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit). Forneça uma matriz de tamanhos e qualquer unidade de dimensão TypedValue para o tamanho.
  • Para usar os tamanhos predefinidos para configurar o dimensionamento automático de TextView no XML, use o namespace android e defina os seguintes atributos:
    • Configure o atributo autoSizeText como none ou uniform. none é um valor padrão e uniform permite dimensionar o TextView de maneira uniforme nos eixos horizontal e vertical.
    • Configure o atributo autoSizePresetSizes como uma matriz de tamanhos predefinidos. Para acessar a matriz como um recurso, defina-a no arquivo 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" />
        

Usar a biblioteca de suporte

  • Para usar tamanhos predefinidos para configurar o dimensionamento automático de TextView de forma programática por meio da Biblioteca de Suporte, chame o método TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit). Forneça uma instância da classe TextView, uma matriz de tamanhos e qualquer unidade de dimensão TypedValue para o tamanho.
  • Para usar tamanhos predefinidos para configurar o dimensionamento automático de TextView no XML por meio da Biblioteca de Suporte, use o namespace app e defina os atributos autoSizeText e autoSizePresetSizes no arquivo XML de layout.
  •     <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>
        

Outros recursos

Para mais informações sobre como dimensionar automaticamente um TextView ao trabalhar com conteúdo dinâmico, assista Dimensionamento automático do TextView (em inglês).