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" encoding="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" 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>
    

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" 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" />
    

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" 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>
    

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_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" />
    

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_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>
    

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