Con Android 8.0 (livello API 26) e versioni successive, puoi indicare una
TextView
per applicare la dimensione del testo
si espanda o si contragga automaticamente per riempire il layout in base
Caratteristiche e confini di TextView
. Questa impostazione semplifica
ottimizzare le dimensioni del testo su schermi diversi con contenuti dinamici.
Support Library 26.0 supporta completamente il TextView
con ridimensionamento automatico
su dispositivi con Android 8.0 (livello API 26) o versioni precedenti.
Il pacchetto android.support.v4.widget
contiene TextViewCompat
per accedere alle caratteristiche in modo compatibile con le versioni precedenti.
Imposta la dimensione automatica di TextView
Puoi utilizzare il framework o la libreria di supporto per configurare il ridimensionamento automatico
TextView
in modo programmatico o in XML. A
Impostare gli attributi XML, puoi anche usare le Proprietà
in Android Studio.
Esistono tre modi per configurare il ridimensionamento automatico di TextView
:
descritti nelle sezioni seguenti:
Nota: se imposti il ridimensionamento automatico in un file XML,
si consiglia di utilizzare il valore "wrap_content" per
Attributi layout_width
o layout_height
di un
TextView
. Questo potrebbe produrre
risultati imprevisti.
Predefinito
L'impostazione predefinita consente il ridimensionamento automatico della scala TextView
in modo uniforme sugli assi orizzontale e verticale.
- Per definire l'impostazione predefinita in modo programmatico, chiama il metodo
setAutoSizeTextTypeWithDefaults(int autoSizeTextType)
. SpecificaAUTO_SIZE_TEXT_TYPE_NONE
per la disattivazione la funzionalità di ridimensionamento automatico oAUTO_SIZE_TEXT_TYPE_UNIFORM
per ridimensiona in modo uniforme gli assi orizzontale e verticale. - Per definire l'impostazione predefinita in XML, utilizza lo spazio dei nomi
android
e impostaautoSizeTextType
a nessuno oppure uniforme.
Nota: le dimensioni predefinite per l'uniformità
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" />
Definisci l'impostazione predefinita utilizzando la Libreria di supporto
- Per definire l'impostazione predefinita in modo programmatico
tramite la libreria di supporto,
chiama il
TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType)
. Fornisci un'istanza del widgetTextView
e 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 Libreria di supporto, utilizza
app
e impostaautoSizeTextType
su nessuno o uniforme.
<?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,
che specifica la dimensione di ogni passaggio. La
TextView
scala in modo uniforme in un intervallo tra
gli attributi dimensione minima e massima. Ogni incremento avviene come passo
dimensioni impostate nell'attributo di granularità.
- Per definire in modo programmatico un intervallo di dimensioni di testo e una dimensione, richiama
il
setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
. Specifica il valore massimo, il valore minimo e la granularità e qualsiasi valoreTypedValue
come unità di misura. - Per definire un intervallo di dimensioni del testo e una dimensione in XML, utilizza l'
android
e imposta lo spazio dei nomi i seguenti attributi:- Imposta il parametro
autoSizeTextType
su nessuno o uniforme. Il valore none è l'impostazione predefinita e uniform consenteTextView
in modo uniforme su orizzontali e verticali. - Imposta
autoSizeMinTextSize
,autoSizeMaxTextSize
, eautoSizeStepGranularity
per definire le dimensioni per il dimensionamento automaticoTextView
.
- Imposta il parametro
<?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 di testo e una dimensione in modo programmatico mediante il
Support Library, chiama il
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
. Indica il valore massimo, il valore minimo e il valore di granularità e qualsiasi unità di dimensioneTypedValue
. - Per definire un intervallo di dimensioni del testo e una dimensione in XML tramite
Libreria, utilizza lo spazio dei nomi
app
e impostaautoSizeText
,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 preimpostate ti consentono di specificare i valori
TextView
effettua la selezione per il ridimensionamento automatico del testo.
-
Per utilizzare le dimensioni preimpostate per configurare il ridimensionamento automatico
TextView
in modo programmatico, chiamasetAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit)
. Fornisci un array di dimensioni e qualsiasiTypedValue
unità di misura per la dimensione. -
Per utilizzare le dimensioni preimpostate per configurare il ridimensionamento automatico
TextView
in XML, usaandroid
e imposta i seguenti attributi:- .
- Imposta
autoSizeTextType
su nessuno o uniforme. Quello nessuno è il valore predefinito, mentre uniform consenteTextView
in modo uniforme su orizzontali e verticali. - Imposta il parametro
autoSizePresetSizes
a un array di dimensioni preimpostate. Per accedere all'array come risorsa, definisci l'array nella classeres/values/arrays.xml
.
- Imposta
<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
TextView
in modo programmatico tramite la libreria di supporto, richiamaTextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit)
. Fornisci un'istanza della classeTextView
, un array di dimensioni e qualsiasi unità di dimensioneTypedValue
per le dimensioni. - Per utilizzare le dimensioni preimpostate per configurare il ridimensionamento automatico
TextView
in XML tramite la Libreria di supporto, usa iapp
e impostaautoSizeTextType
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 dimensionamento automatico di un TextView
quando si utilizza una campagna dinamica
contenuti, guardare
Android Jetpack: ridimensionamento automatico del TextView.