Redimensionner automatiquement les TextViews

Avec Android 8.0 (niveau d'API 26) ou version ultérieure, vous pouvez configurer une TextView pour définir la taille du texte se déplient ou se replient automatiquement pour remplir sa mise en page en fonction Caractéristiques et limites de TextView. Ce paramètre vous permet optimiser la taille du texte sur différents écrans grâce au contenu dynamique.

La bibliothèque Support 26.0 est entièrement compatible avec le dimensionnement automatique de 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 le TextViewCompat. pour accéder aux fonctionnalités de manière rétrocompatible.

Configurer la taille automatique de TextView

Vous pouvez utiliser le framework ou la bibliothèque Support pour configurer le dimensionnement automatique TextView par programmation ou en XML. À définir les attributs XML, vous pouvez également utiliser le composant Properties dans Android Studio.

Il existe trois façons de configurer le dimensionnement automatique de TextView : décrits dans les sections suivantes:

Remarque: Si vous définissez le dimensionnement automatique dans un fichier XML, recommandé d'utiliser la valeur "wrap_content" pour le les attributs layout_width ou layout_height d'un TextView Vous pourriez ainsi générer des résultats inattendus.

Par défaut

Le paramètre par défaut autorise le dimensionnement automatique de TextView à l'échelle. uniformément sur les axes horizontaux et verticaux.

  • Pour définir le paramètre par défaut de manière programmatique, appelez la méthode <ph type="x-smartling-placeholder"></ph> setAutoSizeTextTypeWithDefaults(int autoSizeTextType) . Fournissez AUTO_SIZE_TEXT_TYPE_NONE pour désactiver la fonctionnalité de dimensionnement automatique ou AUTO_SIZE_TEXT_TYPE_UNIFORM pour mettre à l'échelle les axes horizontal et vertical de manière uniforme.
  • Remarque: Les dimensions par défaut des variables uniformes le scaling sont de minTextSize = 12sp, maxTextSize = 112sp et granularity = 1px.

  • Pour définir le paramètre par défaut en XML, utilisez l'espace de noms android. et définissez autoSizeTextType sur none ou uniforme.
  • <?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 par programmation via la bibliothèque Support, appelle la méthode <ph type="x-smartling-placeholder"></ph> TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType) . Fournissez une instance du widget TextView et l'un des types de texte. comme TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE ou TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
  • Pour définir le paramètre par défaut au format XML via la bibliothèque Support, utilisez la méthode Espace de noms app et définissez autoSizeTextType 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>
    

Précision

Vous pouvez définir une plage de tailles de texte minimale et maximale, ainsi qu'une qui spécifie la taille de chaque étape. La TextView effectue un scaling uniforme dans une plage comprise entre les les attributs de taille minimale et maximale. Chaque incrément se produit en tant que taille définie dans l'attribut de précision.

  • Pour définir une plage de tailles de texte et une dimension de manière programmatique, appelez la setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) . Indiquez la valeur maximale, la valeur minimale et le niveau de précision. et toute valeur TypedValue unité de dimension.
  • Pour définir une plage de tailles de texte et une dimension au format XML, utilisez l'android et définir les attributs suivants: <ph type="x-smartling-placeholder">
      </ph>
    • Définissez le paramètre autoSizeTextType sur none ou uniform. La valeur none est la valeur par défaut, tandis que la valeur uniform TextView effectue un scaling uniforme sur les axes horizontal et des axes verticaux.
    • Définissez le autoSizeMinTextSize, autoSizeMaxTextSize, et autoSizeStepGranularity afin de définir les dimensions pour le dimensionnement TextView
  • <?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 le de la bibliothèque Support, appelez la fonction <ph type="x-smartling-placeholder"></ph> TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) . Indiquez la valeur maximale, la valeur minimale, la valeur de précision et toute unité de dimension TypedValue.
  • Pour définir une plage de tailles de texte et une dimension au format XML via l'API bibliothèque, utilisez l'espace de noms app et définissez autoSizeText, autoSizeMinTextSize, autoSizeMaxTextSize et autoSizeStepGranularity 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 TextView sélectionne automatiquement le texte.

  • Pour utiliser des tailles prédéfinies afin de configurer l'ajustement automatique TextView par programmation, appelez la méthode setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit) . Fournissez un tableau de tailles et n'importe quel TypedValue pour la taille.
  • Pour utiliser des tailles prédéfinies afin de configurer l'ajustement automatique TextView en XML, utilisez la commande android et définissez les attributs suivants: <ph type="x-smartling-placeholder">
      </ph>
    • Définir l'élément autoSizeTextType sur none ou uniform. La valeur none est la valeur par défaut, et la valeur uniform TextView effectue un scaling uniforme sur les axes horizontal et des axes verticaux.
    • Définissez le paramètre autoSizePresetSizes à un tableau de tailles prédéfinies. Pour accéder au tableau en tant que ressource, définissez le tableau dans res/values/arrays.xml .
  • <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 l'ajustement automatique TextView de façon programmatique via la bibliothèque Support, appelez <ph type="x-smartling-placeholder"></ph> TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit) . Fournissez une instance de la classe TextView, une tableau de tailles et toute unité de dimension TypedValue pour la taille.
  • Pour utiliser des tailles prédéfinies afin de configurer l'ajustement automatique TextView en XML via la bibliothèque Support, utilisez la app, puis définissez les paramètres autoSizeTextType et autoSizePresetSizes 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 des créations dynamiques contenu, regarder Android Jetpack: dimensionnement automatique de TextView