Com o Android 8.0 (API de nível 26) ou versões mais recentes, é possível instruir um
TextView
para permitir que o tamanho do texto
se expanda ou se contraia automaticamente para preencher o layout com base nas
características e limites da 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 suporte total ao recurso de dimensionamento automático de TextView
em dispositivos com o Android 8.0 (nível 26 da API) ou versões anteriores.
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 de 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.
Há três maneiras de configurar o dimensionamento automático de TextView
,
descritas nas seções a seguir:
Observação: se você configurar o dimensionamento automático em um arquivo XML, não
recomendamos o uso do valor "wrap_content" para os atributos
layout_width
ou layout_height
de um
TextView
. Isso pode gerar
resultados inesperados.
Padrão
A configuração padrão permite que o dimensionamento automático de TextView
seja escalonado 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çaAUTO_SIZE_TEXT_TYPE_NONE
para desativar o recurso de dimensionamento automático ouAUTO_SIZE_TEXT_TYPE_UNIFORM
para dimensionar os eixos horizontal e vertical de maneira uniforme. - Para definir a configuração padrão em XML, use o namespace
android
e defina o atributoautoSizeTextType
como none ou uniform.
Observação: as dimensões padrão para um escalonamento
uniforme são minTextSize = 12sp
,
maxTextSize = 112sp
e granularity = 1px.
.
<?xml version="1.0" encoding="utf-8"?> <TextView android:layout_width="match_parent" android:layout_height="200dp" android:autoSizeTextType="uniform" />
Definir a configuração padrão usando a Biblioteca de Suporte
- Para definir a configuração padrão de forma programática com a Biblioteca de Suporte, chame o método
TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType)
. Forneça uma instância do widgetTextView
e um dos tipos de texto, comoTextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE
ouTextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
. - Para definir a configuração padrão em XML usando a Biblioteca de Suporte, use o namespace
app
e defina o atributoautoSizeTextType
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 como o tamanho da
etapa definido no atributo de granularidade.
- Para definir um intervalo de tamanhos de texto e uma dimensão de forma programática, chame
o
método
setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
. Informe os valores máximo, mínimo, de granularidade e qualquer unidade de dimensãoTypedValue
. - Para definir um intervalo de tamanhos de texto e uma dimensão em XML, use o namespace
android
e defina os seguintes atributos:- Defina o atributo
autoSizeTextType
como none ou uniform. O valor none é o padrão, e uniform permite queTextView
seja escalonado de maneira uniforme nos eixos horizontal e vertical. - Defina os atributos
autoSizeMinTextSize
,autoSizeMaxTextSize
eautoSizeStepGranularity
para definir as dimensões de dimensionamento automático doTextView
.
- Defina o atributo
<?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" />
Definir granularidade usando a Biblioteca de Suporte
- Para definir um intervalo de tamanhos de texto e uma dimensão de forma programática com a
Biblioteca de Suporte, chame o
método
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
. Informe os valores máximo, mínimo, de granularidade, bem como qualquer unidade de dimensãoTypedValue
. - Para definir um intervalo de tamanhos de texto e uma dimensão em XML com a Biblioteca de
Suporte, use o namespace
app
e defina os atributosautoSizeText
,autoSizeMinTextSize
,autoSizeMaxTextSize
eautoSizeStepGranularity
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
Os tamanhos predefinidos permitem especificar os valores que a
TextView
escolhe ao dimensionar automaticamente o texto.
-
Para usar os tamanhos predefinidos para configurar o dimensionamento automático de
TextView
de forma programática, chame o métodosetAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit)
. Forneça uma matriz de tamanhos e qualquer unidade de dimensãoTypedValue
para o tamanho. -
Para usar tamanhos predefinidos para configurar o dimensionamento automático de
TextView
no XML, use o namespaceandroid
e defina os seguintes atributos:- Defina o atributo
autoSizeTextType
como none ou uniform. O valor none é o padrão, e uniform permite queTextView
seja escalonado 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 arquivores/values/arrays.xml
.
- Defina o atributo
<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" />
Configurar tamanhos predefinidos usando a Biblioteca de Suporte
- Para usar tamanhos predefinidos para configurar o dimensionamento automático de
TextView
de forma programática usando a Biblioteca de Suporte, chame o métodoTextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit)
. Forneça uma instância da classeTextView
, uma matriz de tamanhos e qualquer unidade de dimensãoTypedValue
para o tamanho. - Para usar tamanhos predefinidos para configurar o dimensionamento automático de
TextView
em XML pela Biblioteca de Suporte, use o namespaceapp
e defina os atributosautoSizeTextType
eautoSizePresetSizes
no arquivo XML do 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 saber mais sobre o dimensionamento automático de um TextView
ao trabalhar com conteúdo
dinâmico, assista
Android Jetpack: dimensionamento automático da TextView.