Com o Android 8.0 (API de nível 26) e versões mais recentes, é possível instruir
TextView
para permitir que o tamanho do texto
expandir ou contrair-se automaticamente para preencher o layout com base na
Características e limites de TextView
. Com essa configuração,
otimize o tamanho do texto em diferentes telas com conteúdo dinâmico.
A Biblioteca de Suporte 26.0 oferece suporte total ao 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 o TextViewCompat
.
para acessar recursos de maneira compatível com versões anteriores.
Configurar o dimensionamento automático da TextView
É possível usar o framework ou a Biblioteca de Suporte para configurar o dimensionamento automático de
TextView
programaticamente 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ê definir o dimensionamento automático em um arquivo XML, não definiremos
recomendado usar o valor "wrap_content" para o
atributos layout_width
ou layout_height
de um
TextView
. Isso pode produzir
resultados inesperados.
Padrão
A configuração padrão permite o dimensionamento automático do TextView
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)
. InformeAUTO_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 oautoSizeTextType
como none ou uniforme.
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" />
Definir a configuração padrão usando 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 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 pela Biblioteca de Suporte, use o método
o namespace
app
e defina oautoSizeTextType
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 a 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 e granularidade e qualquerTypedValue
unidade de dimensão. - Para definir um intervalo de tamanhos de texto e uma dimensão em XML, use o método
android
namespace e configure os seguintes atributos:- Defina o
autoSizeTextType
como none ou uniform. O valor none é o padrão, e uniforme permiteTextView
são dimensionadas de maneira uniforme na horizontal e eixos verticais. - Defina o
autoSizeMinTextSize
,autoSizeMaxTextSize
, eautoSizeStepGranularity
para definir as dimensões de dimensionamento automáticoTextView
- Defina o
<?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 por meio do
da 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 e qualquer unidade de dimensãoTypedValue
. - Para definir um intervalo de tamanhos de texto e uma dimensão em XML por meio do Suporte
biblioteca, use o namespace
app
e defina oautoSizeText
,autoSizeMinTextSize
autoSizeMaxTextSize
e AtributosautoSizeStepGranularity
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 o
O TextView
escolhe ao dimensionar o texto 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:- Defina o
autoSizeTextType
como none ou uniform. O parâmetro none valor é o padrão, e uniforme permiteTextView
são dimensionadas de maneira uniforme na horizontal e eixos verticais. - 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
<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" />
Definir tamanhos predefinidos usando a Biblioteca de Suporte
- Para usar tamanhos predefinidos para configurar o dimensionamento automático de
TextView
de maneira programática pela Biblioteca de Suporte, chame o métodoTextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit)
. Forneça uma instância da classeTextView
, um 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 oapp
e definaautoSizeTextType
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 mais informações sobre como dimensionar automaticamente um TextView
ao trabalhar com recursos dinâmicos
conteúdo, assistir
Android Jetpack: dimensionamento automático do TextView (em inglês).