Sous Android 8.0 (niveau d'API 26) ou version ultérieure, vous pouvez demander à une TextView
de laisser la taille du texte se développer ou se réduire automatiquement pour remplir sa mise en page en fonction des caractéristiques et des limites de la TextView
. Ce paramètre permet d'optimiser plus facilement la taille du texte sur différents écrans avec du contenu dynamique.
La bibliothèque Support 26.0 est entièrement compatible avec la fonctionnalité de dimensionnement automatique TextView
sur les appareils équipés d'Android 8.0 (niveau d'API 26) ou version antérieure.
Le package android.support.v4.widget
contient la classe TextViewCompat
pour accéder aux fonctionnalités d'une manière rétrocompatible.
Configurer le redimensionnement automatique de TextView
Vous pouvez utiliser le framework ou la bibliothèque Support pour configurer le dimensionnement automatique de TextView
par programmation ou au format XML. Pour définir les attributs XML, vous pouvez également utiliser la fenêtre Properties (Propriétés) d'Android Studio.
Trois options s'offrent à vous pour configurer le dimensionnement automatique de TextView
, qui sont décrites dans les sections suivantes:
Remarque: Si vous définissez le dimensionnement automatique dans un fichier XML, nous vous déconseillons d'utiliser la valeur "wrap_content" pour les attributs layout_width
ou layout_height
d'une TextView
. Cela pourrait produire des résultats inattendus.
Par défaut
Le paramètre par défaut permet le dimensionnement automatique de TextView
de manière uniforme sur les axes horizontal et vertical.
- Pour définir le paramètre par défaut de manière programmatique, appelez la méthode
setAutoSizeTextTypeWithDefaults(int autoSizeTextType)
. FournissezAUTO_SIZE_TEXT_TYPE_NONE
pour désactiver la fonctionnalité de dimensionnement automatique, ouAUTO_SIZE_TEXT_TYPE_UNIFORM
pour mettre à l'échelle les axes horizontal et vertical de manière uniforme. - Pour définir le paramètre par défaut en XML, utilisez l'espace de noms
android
et définissez l'attributautoSizeTextType
sur none ou uniform.
Remarque: Les dimensions par défaut pour la mise à l'échelle uniforme sont minTextSize = 12sp
, maxTextSize = 112sp
et granularity = 1px.
.
<?xml version="1.0" encoding="utf-8"?> <TextView android:layout_width="match_parent" android:layout_height="200dp" android:autoSizeTextType="uniform" />
Définir le paramètre par défaut à l'aide de la bibliothèque Support
- Pour définir le paramètre par défaut de manière automatisée via la bibliothèque Support, appelez la méthode
TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType)
. Fournissez une instance du widgetTextView
et l'un des types de texte, tels queTextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE
ouTextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
. - Pour définir le paramètre par défaut en XML via la bibliothèque Support, utilisez l'espace de noms
app
et définissez l'attributautoSizeTextType
sur 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>
Niveau de précision
Vous pouvez définir une plage de tailles de texte minimales et maximales, ainsi qu'une dimension spécifiant la taille de chaque étape. TextView
s'adapte de manière uniforme dans une plage comprise entre les attributs de taille minimale et maximale. Chaque incrément se produit en tant que taille de pas définie dans l'attribut de granularité.
- Pour définir une plage de tailles de texte et une dimension de manière programmatique, appelez la méthode
setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
. Indiquez la valeur maximale, la valeur minimale, la valeur de précision et n'importe quelle unité de dimensionTypedValue
. - Pour définir une plage de tailles de texte et une dimension en XML, utilisez l'espace de noms
android
et définissez les attributs suivants :- Définissez l'attribut
autoSizeTextType
sur none ou uniform. La valeur none est la valeur par défaut, et uniform permet àTextView
d'effectuer une mise à l'échelle uniforme sur l'axe horizontal et l'axe vertical. - Définissez les attributs
autoSizeMinTextSize
,autoSizeMaxTextSize
etautoSizeStepGranularity
pour définir les dimensions de dimensionnement automatique deTextView
.
- Définissez l'attribut
<?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" />
Définir la précision à l'aide de la bibliothèque Support
- Pour définir une plage de tailles de texte et une dimension de manière programmatique via la bibliothèque Support, appelez la méthode
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
. Indiquez la valeur maximale, la valeur minimale, la valeur de précision et n'importe quelle unité de dimensionTypedValue
. - Pour définir une plage de tailles de texte et une dimension en XML via la bibliothèque Support, utilisez l'espace de noms
app
et définissez les attributsautoSizeText
,autoSizeMinTextSize
,autoSizeMaxTextSize
etautoSizeStepGranularity
dans le fichier XML de mise en page.
<?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>
Tailles prédéfinies
Les tailles prédéfinies vous permettent de spécifier les valeurs sélectionnées par TextView
lors du redimensionnement automatique du texte.
-
Pour utiliser des tailles prédéfinies afin de configurer le dimensionnement automatique de
TextView
de manière programmatique, appelez la méthodesetAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit)
. Fournissez un tableau des tailles et n'importe quelle unité de dimensionTypedValue
pour la taille. -
Pour configurer le dimensionnement automatique de
TextView
en XML à l'aide de tailles prédéfinies, utilisez l'espace de nomsandroid
et définissez les attributs suivants :- Définissez l'attribut
autoSizeTextType
sur none ou uniform. La valeur none est la valeur par défaut, et uniform permet àTextView
d'effectuer une mise à l'échelle uniforme sur l'axe horizontal et l'axe vertical. - Définissez l'attribut
autoSizePresetSizes
sur un tableau de tailles prédéfinies. Pour accéder au tableau en tant que ressource, définissez-le dans le fichierres/values/arrays.xml
.
- Définissez l'attribut
<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" />
Configurer des tailles prédéfinies à l'aide de la bibliothèque Support
- Pour utiliser des tailles prédéfinies afin de configurer le dimensionnement automatique de
TextView
de manière programmatique via la bibliothèque Support, appelez la méthodeTextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit)
. Fournissez une instance de la classeTextView
, un tableau de tailles et n'importe quelle unité de dimensionTypedValue
pour la taille. - Pour utiliser des tailles prédéfinies afin de configurer le dimensionnement automatique de
TextView
en XML via la bibliothèque Support, utilisez l'espace de nomsapp
, et définissez les attributsautoSizeTextType
etautoSizePresetSizes
dans le fichier XML de mise en page.
<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>
Ressources supplémentaires
Pour en savoir plus sur le dimensionnement automatique d'une TextView
lorsque vous utilisez du contenu dynamique, regardez la vidéo Android Jetpack: Dimensionnement automatique de TextView.