Com o Android 8.0 (API de nível 26) e versões mais recentes, é 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 de nível 26). A biblioteca oferece compatibilidade com o Android
4.0 (API de nível 14) e versões mais recentes. O pacote android.support.v4.widget
contém a classe TextViewCompat
para acessar recursos de maneira
compatível com versões anteriores.
Como configurar o dimensionamento automático do TextView
Você pode usar o framework ou a Biblioteca de Suporte para configurar o dimensionamento automático do
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 do 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ç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 dimensionamento
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" />
Como usar a Biblioteca de Suporte
- Para definir a configuração padrão de forma programática usando 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 conforme o tamanho do
passo 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)
. Forneça 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, use o namespace
android
e defina os seguintes atributos:- Configure o atributo
autoSizeText
como none ou uniform. O none é um valor padrão, e o uniform permite dimensionarTextView
de maneira uniforme nos eixos horizontal e vertical. - Configure os atributos
autoSizeMinTextSize
,autoSizeMaxTextSize
eautoSizeStepGranularity
para definir as medidas de dimensionamento automático deTextView
.
- Configure 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" />
Como usar 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)
. Forneça 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 usando a Biblioteca
de Suporte, use o namespace
app
e configure 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
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étodosetAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit)
. Forneça uma matriz de tamanhos e qualquer unidade de dimensãoTypedValue
para o tamanho. -
Para usar os tamanhos predefinidos para configurar o dimensionamento automático de
TextView
no XML, use o namespaceandroid
e defina os seguintes atributos:- Configure o atributo
autoSizeText
como none ou uniform. O none é um valor padrão, e o uniform permite dimensionarTextView
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
.
- Configure 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" />
Como usar 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
no XML usando a Biblioteca de Suporte, use o namespaceapp
e defina os atributosautoSizeText
eautoSizePresetSizes
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 ver mais informações sobre como dimensionar automaticamente uma TextView
ao trabalhar com conteúdo
dinâmico, assista Dimensionamento automático do TextView.