Con Android 8.0 (livello API 26) e versioni successive, puoi indicare a un TextView
di consentire l'espansione o la riduzione automatica delle dimensioni del testo in modo da riempire il suo layout in base alle caratteristiche e ai limiti di TextView
. Questa impostazione semplifica l'ottimizzazione delle dimensioni del testo su schermi diversi con contenuti dinamici.
Support Library 26.0 supporta completamente la funzionalità di ridimensionamento automatico TextView
sui dispositivi con Android 8.0 (livello API 26) o versioni precedenti.
Il pacchetto android.support.v4.widget
contiene la classe TextViewCompat
per accedere alle funzionalità in modo compatibile con le versioni precedenti.
Impostazione della dimensione automatica di TextView
Puoi utilizzare il framework o la libreria di supporto per configurare il ridimensionamento automatico di
TextView
in modo programmatico o in XML. Per impostare gli attributi XML, puoi anche utilizzare la finestra Proprietà in Android Studio.
Esistono tre modi per configurare il dimensionamento automatico di TextView
,
descritti nelle sezioni seguenti:
Nota: se imposti il dimensionamento automatico in un file XML, sconsigliamo di utilizzare il valore "wrap_content" per gli attributi layout_width
o layout_height
di un TextView
. Questa operazione potrebbe produrre risultati imprevisti.
Predefinito
L'impostazione predefinita consente al ridimensionamento automatico di TextView
di scalare
uniformemente sugli assi orizzontale e verticale.
- Per definire l'impostazione predefinita in modo programmatico, chiama il metodo
setAutoSizeTextTypeWithDefaults(int autoSizeTextType)
. FornisciAUTO_SIZE_TEXT_TYPE_NONE
per disattivare la funzionalità di ridimensionamento automatico oAUTO_SIZE_TEXT_TYPE_UNIFORM
per scalare in modo uniforme gli assi orizzontale e verticale. - Per definire l'impostazione predefinita in XML, utilizza lo spazio dei nomi
android
e imposta l'attributoautoSizeTextType
su none o uniform.
Nota: le dimensioni predefinite per la scalabilità uniforme sono 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" />
Definire l'impostazione predefinita utilizzando la libreria di supporto
- Per definire l'impostazione predefinita in modo programmatico tramite la libreria di supporto,
chiama il metodo
TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType)
. Fornisci un'istanza del widgetTextView
e di uno dei tipi di testo, comeTextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE
oTextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
. - Per definire l'impostazione predefinita in XML tramite la Support Library, utilizza lo spazio dei nomi
app
e imposta l'attributoautoSizeTextType
su 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>
Granularità
Puoi definire un intervallo di dimensioni minime e massime del testo e una dimensione che specifichi la dimensione di ogni passaggio. TextView
ridimensiona in modo uniforme in un intervallo tra gli attributi di dimensione minima e massima. Ogni incremento si verifica come dimensione del passaggio impostata nell'attributo granularità.
- Per definire un intervallo di dimensioni del testo e una dimensione in modo programmatico, chiama
il
metodo
setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
. Fornisci il valore massimo, il valore minimo, il valore di granularità e qualsiasi unità della dimensioneTypedValue
. - Per definire un intervallo di dimensioni del testo e una dimensione in XML, utilizza lo spazio dei nomi
android
e imposta i seguenti attributi:- Imposta l'attributo
autoSizeTextType
su none o uniform. Il valore none è il valore predefinito e uniform consente aTextView
di scalare in modo uniforme sugli assi orizzontale e verticale. - Imposta gli attributi
autoSizeMinTextSize
,autoSizeMaxTextSize
eautoSizeStepGranularity
per definire le dimensioni per il ridimensionamento automatico diTextView
.
- Imposta l'attributo
<?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" />
Definizione della granularità utilizzando la libreria di supporto
- Per definire un intervallo di dimensioni del testo e una dimensione in modo programmatico tramite la
Support Library, chiama il metodo
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
. Fornisci il valore massimo, il valore minimo, il valore di granularità e qualsiasi unità della dimensioneTypedValue
. - Per definire un intervallo di dimensioni del testo e una dimensione in XML tramite la Support Library, utilizza lo spazio dei nomi
app
e imposta gli attributiautoSizeText
,autoSizeMinTextSize
,autoSizeMaxTextSize
eautoSizeStepGranularity
nel file XML di 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>
Dimensioni preimpostate
Le dimensioni predefinite consentono di specificare i valori scelti da TextView
durante il ridimensionamento automatico del testo.
-
Per utilizzare le dimensioni preimpostate per configurare il ridimensionamento automatico di
TextView
in modo programmatico, chiama il metodosetAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit)
. Fornisci un array di dimensioni e qualsiasi unità di dimensioneTypedValue
per la dimensione. -
Per utilizzare le dimensioni preimpostate per configurare il dimensionamento automatico di
TextView
in XML, utilizza lo spazio dei nomiandroid
e imposta i seguenti attributi:- Imposta l'attributo
autoSizeTextType
su none o uniform. Il valore none è il valore predefinito e uniform consente aTextView
di scalare in modo uniforme sugli assi orizzontale e verticale. - Imposta l'attributo
autoSizePresetSizes
su un array di dimensioni preimpostate. Per accedere all'array come risorsa, definisci l'array nel fileres/values/arrays.xml
.
- Imposta l'attributo
<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" />
Configurare le dimensioni preimpostate utilizzando la libreria di supporto
- Per utilizzare le dimensioni preimpostate per configurare il ridimensionamento automatico di
TextView
in modo programmatico tramite la libreria di assistenza, chiama il metodoTextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit)
. Fornisci un'istanza della classeTextView
, un array di dimensioni e qualsiasi unità della dimensioneTypedValue
per la dimensione. - Per utilizzare le dimensioni preimpostate per configurare il dimensionamento automatico di
TextView
in XML tramite la Support Library, utilizza lo spazio dei nomiapp
e imposta gli attributiautoSizeTextType
eautoSizePresetSizes
nel file XML di 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>
Risorse aggiuntive
Per ulteriori informazioni sul ridimensionamento automatico di un elemento TextView
quando utilizzi contenuti
dinamici, guarda il video
Android Jetpack: Autosizing TextView.