Automatycznie dopasuj rozmiar widoków tekstowych

W Androidzie 8.0 (poziom interfejsu API 26) lub nowszym możesz poinstruować TextView, aby umożliwić rozmiar tekstu automatycznie się rozszerzać lub zmniejszać, by wypełnić układ w oparciu o TextView – cechy i granice. To ustawienie ułatwia aby zoptymalizować rozmiar tekstu na różnych ekranach za pomocą zawartości dynamicznej.

Biblioteka pomocy 26.0 w pełni obsługuje automatyczny rozmiar TextView na urządzeniach z Androidem 8.0 (poziom interfejsu API 26) lub starszym. Pakiet android.support.v4.widget zawiera TextViewCompat aby uzyskać dostęp do funkcji w sposób zgodny wstecznie.

Konfigurowanie automatycznego rozmiaru obiektu TextView

Aby skonfigurować automatyczny rozmiar reklam, możesz użyć platformy lub biblioteki pomocy TextView programowo lub w formacie XML. Do ustaw atrybuty XML, możesz też użyć polecenia Właściwości w Android Studio.

Automatyczny rozmiar elementu TextView możesz skonfigurować na 3 sposoby: opisane w sekcjach poniżej:

Uwaga: jeśli ustawisz autoskalowanie w pliku XML, zalecane z wartością „wrap_content” dla wartości layout_width lub layout_height atrybutu TextView. Może to spowodować, nieoczekiwane rezultaty.

Domyślny

Ustawienie domyślne umożliwia automatyczne skalowanie TextView równomiernie na osiach poziomej i pionowej.

  • Aby automatycznie zdefiniować ustawienie domyślne, wywołaj funkcję setAutoSizeTextTypeWithDefaults(int autoSizeTextType) . Podaj urządzenie AUTO_SIZE_TEXT_TYPE_NONE, aby je wyłączyć użyj funkcji automatycznego rozmiaru lub elementu AUTO_SIZE_TEXT_TYPE_UNIFORM, aby równomiernie skalować oś poziomą i pionową.
  • Uwaga: domyślne wymiary jednostki jednolitej. skalowanie wynosi minTextSize = 12sp, maxTextSize = 112sp i granularity = 1px.

  • Aby określić domyślne ustawienie w pliku XML, użyj przestrzeni nazw android i ustaw autoSizeTextType wartość none lub uniform.
  • <?xml version="1.0" encodin>g<="utf-8"?
    TextView
        android:layout_width="match_parent"
        android:layout_height="200dp"
    >    android:autoSizeTextType="uniform" /

Definiowanie ustawienia domyślnego za pomocą biblioteki pomocy

  • Aby automatycznie zdefiniować ustawienie domyślne przy użyciu biblioteki pomocy, Wywołaj funkcję TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType) . Podaj wystąpienie widżetu TextView i jeden z typów tekstu, na przykład TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE lub TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
  • Aby zdefiniować domyślne ustawienie w pliku XML za pomocą biblioteki pomocy, użyj Przestrzeń nazw app i ustaw autoSizeTextType jako none (brak) lub uniform (uniform).
  • <?xml version="1.0" encodin>g<="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_par>ent&<quot;
        android:layout_height="match_parent"
    
      TextView
          android:layout_width="match_parent"
        >  <android:layou>t_height="200dp"
          app:autoSizeTextType="uniform" /
    
    /LinearLayout

Szczegółowość

Możesz zdefiniować zakres minimalnych i maksymalnych rozmiarów tekstu oraz który określa rozmiar każdego kroku. TextView skaluje się równomiernie w zakresie od minimalny i maksymalny rozmiar. Każdy przyrost ma miejsce rozmiar ustawiony w atrybucie szczegółowości.

  • Aby automatycznie zdefiniować zakres rozmiarów tekstu i wymiar, wywołaj setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) . Podaj wartość maksymalną, minimalną i szczegółowość i dowolny TypedValue jednostki wymiaru.
  • Aby zdefiniować zakres rozmiarów tekstu i wymiar w pliku XML, użyj funkcji android przestrzeń nazw i ustaw następujące atrybuty:
    • Ustaw parametr autoSizeTextType jako none (brak) lub uniform (uniform). Wartość none (brak) jest wartością domyślną, a uniform pozwala TextView skalują się równomiernie w poziomie od osi pionowej.
    • Ustaw autoSizeMinTextSize, autoSizeMaxTextSize, i autoSizeStepGranularity atrybutów definiujących wymiary do automatycznego dobierania rozmiaru TextView.
  • <?xml version="1.0" encodin>g<="utf-8"?
    TextView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:autoSizeTextType="uniform"
        android:autoSizeMinTextSize="12sp"
        android:autoSizeMax>TextSize="100sp"
        android:autoSizeStepGranularity="2sp" /

Określanie szczegółowości za pomocą biblioteki pomocy

  • Aby zdefiniować zakres rozmiarów tekstu i wymiar automatycznie za pomocą Support Library, wywołaj TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) . należy podać wartość maksymalną, minimalną, szczegółowość i dowolne jednostki wymiarów TypedValue.
  • Aby zdefiniować zakres rozmiarów tekstu i wymiar w formacie XML, korzystając z pomocy użyj przestrzeni nazw app i ustaw autoSizeText, autoSizeMinTextSize autoSizeMaxTextSize i Atrybuty autoSizeStepGranularity w pliku XML układu.
  • <?xml version="1.0" encodin>g<="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_par>ent&<quot;
        android:layout_height="match_parent"
    
      TextView
          android:layout_width="match_parent"
          android:layout_height="200dp"
          app:autoSizeTextType="uniform"
          app:autoSizeMinTextS>iz<e="12sp&>quot;
          app:autoSizeMaxTextSize="100sp"
          app:autoSizeStepGranularity="2sp" /
    
    /LinearLayout

Gotowe rozmiary

Gotowe rozmiary umożliwiają określenie wartości, TextView wybiera ten rozmiar przy automatycznym rozmiarze tekstu.

  • Aby użyć gotowych rozmiarów do skonfigurowania automatycznego rozmiaru TextView automatycznie, wywołaj metodę setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit) . Podaj tablicę rozmiarów i dowolnych elementów TypedValue jednostkę rozmiaru.
  • Aby użyć gotowych rozmiarów do skonfigurowania automatycznego rozmiaru TextView w pliku XML, użyj android na przestrzeń nazw i ustaw następujące atrybuty:
    • Ustaw autoSizeTextType jako none (brak) lub uniform (uniform). Wartość none (brak) jest wartością domyślną, a pole uniform pozwala TextView skalują się równomiernie w poziomie od osi pionowej.
    • Ustaw parametr autoSizePresetSizes do tablicy z gotowymi rozmiarami. Aby uzyskać dostęp do tablicy jako zdefiniuj tablicę w funkcji res/values/arrays.xml .
  • <resources>
      <array name="autosize_text_s>izes&<quot;
       < item>1<0sp/item
    <    i>tem&g<t;12sp/it<em
      >  ite<m>20sp</item>
        <item>40<sp/it>em
    <    it>e<m>100sp>/item
      /array
    /resources
    <?xml version="1.0" encodin>g<="utf-8"?
    TextView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:autoSizeTextType="uniform"
        android:>autoSizePresetSizes="@array/autosize_text_sizes" /

Konfigurowanie gotowych rozmiarów za pomocą biblioteki pomocy

  • Aby użyć gotowych rozmiarów do skonfigurowania automatycznego rozmiaru TextView automatycznie z biblioteki pomocy, wywołaj metodę TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit) . Podaj instancję klasy TextView, tablica rozmiarów i dowolna jednostka wymiarów TypedValue dla rozmiar.
  • Aby użyć gotowych rozmiarów do skonfigurowania automatycznego rozmiaru TextView w pliku XML za pomocą biblioteki pomocy, użyj app oraz ustaw zmienne autoSizeTextType i Atrybuty autoSizePresetSizes w pliku XML układu.
  • <resources>
      <array name="autosize_text_s>izes&<quot;
       < item>1<0sp/item
    <    i>tem&g<t;12sp/it<em
      >  ite<m>20sp</item>
        <item>40<sp/it>em
    <    it>e<m>100sp>/item
      /array
    /resources
    <?xml version="1.0" encodin>g<="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_par>ent&<quot;
        android:layout_height="match_parent"
    
      TextView
          android:layout_width="match_parent"
          android:layout_height="200dp"
          app:autoSiz>e<TextType=&quo>t;uniform"
          app:autoSizePresetSizes="@array/autosize_text_sizes" /
    /LinearLayout

Dodatkowe materiały

Dodatkowe informacje o automatycznym rozmiarze elementu TextView przy pracy z komponentami dynamicznymi treść, obejrzyj Android Jetpack: automatyczne określanie rozmiaru obiektu TextView