Automatycznie dopasuj rozmiar widoków tekstowych

W Androidzie 8.0 (poziom interfejsu API 26) lub nowszym możesz polecić TextView, aby rozmiar tekstu powiększał lub zmniejszał się automatycznie w celu wypełnienia układu zgodnie z cechami i granicami elementu TextView. To ustawienie ułatwia optymalizowanie rozmiaru tekstu na różnych ekranach z zawartością dynamiczną.

Biblioteka pomocy w wersji 26.0 w pełni obsługuje funkcję automatycznego rozmiaru TextView na urządzeniach z Androidem w wersji 8.0 (poziom interfejsu API 26) lub niższym. Pakiet android.support.v4.widget zawiera klasę TextViewCompat umożliwiającą dostęp do funkcji w sposób zgodny wstecznie.

Konfigurowanie automatycznego rozmiaru TextView

Możesz użyć platformy lub biblioteki pomocy, aby skonfigurować automatyczne określanie rozmiaru elementu TextView w sposób automatyczny lub w pliku XML. Aby ustawić atrybuty XML, możesz też użyć okna Właściwości w Android Studio.

Automatyczne dostosowanie rozmiaru elementu TextView możesz skonfigurować na 3 sposoby opisane w sekcjach poniżej:

Uwaga: jeśli ustawisz automatyczne określanie rozmiaru w pliku XML, nie zalecamy używania wartości „wrap_content” dla atrybutów layout_width ani layout_height w TextView. Może to spowodować nieoczekiwane wyniki.

Domyślne

Ustawienie domyślne umożliwia równomierne automatyczne skalowanie rozmiaru TextView zarówno na osi poziomej, jak i pionowej.

  • Aby automatycznie zdefiniować ustawienie domyślne, wywołaj metodę setAutoSizeTextTypeWithDefaults(int autoSizeTextType) . Użyj funkcji AUTO_SIZE_TEXT_TYPE_NONE, aby wyłączyć funkcję automatycznego określania rozmiaru, lub zasady AUTO_SIZE_TEXT_TYPE_UNIFORM, aby równomiernie skalować oś poziomą i pionową.
  • Uwaga: domyślne wymiary dla równomiernego skalowania to minTextSize = 12sp, maxTextSize = 112sp i granularity = 1px.

  • Aby zdefiniować ustawienie domyślne w formacie XML, użyj przestrzeni nazw android i ustaw atrybut autoSizeTextType na none (brak) 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 przy użyciu biblioteki pomocy

  • Aby automatycznie zdefiniować ustawienie domyślne za pomocą Biblioteki pomocy, wywołaj metodę 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 przestrzeni nazw app i ustaw atrybut autoSizeTextType na none (brak) lub uniform (jednolity).
  • <?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 wymiar, który określa rozmiar każdego kroku. Element TextView skaluje się równomiernie w zakresie między atrybutami rozmiaru minimalnego i maksymalnego. Każde zwiększenie ma miejsce jako rozmiar kroku ustawiony w atrybucie szczegółowości.

  • Aby automatycznie zdefiniować zakres rozmiarów tekstu i wymiar, wywołaj metodę setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit). Podaj wartość maksymalną, wartość minimalną, wartość szczegółowości i dowolną jednostkę wymiaru TypedValue.
  • Aby zdefiniować zakres rozmiarów tekstu i wymiar w formacie XML, użyj przestrzeni nazw android i ustaw te atrybuty:
    • Ustaw atrybut autoSizeTextType na none (brak) lub uniform (jednolity). Wartość domyślna to none, a opcja jednolite umożliwia równomierne skalowanie obiektu TextView zarówno na osi poziomej, jak i pionowej.
    • Ustaw atrybuty autoSizeMinTextSize, autoSizeMaxTextSize i autoSizeStepGranularity, aby zdefiniować wymiary na potrzeby automatycznego 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" />
    

Definiowanie szczegółowości przy użyciu biblioteki pomocy

  • Aby automatycznie zdefiniować zakres rozmiarów tekstu i wymiar za pomocą Biblioteki pomocy, wywołaj metodę TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit). Podaj wartość maksymalną i minimalną, wartość szczegółowości i dowolną jednostkę wymiaru TypedValue.
  • Aby zdefiniować zakres rozmiarów tekstu i wymiarów w pliku XML za pomocą Biblioteki pomocy, użyj przestrzeni nazw app i ustaw atrybuty autoSizeText, autoSizeMinTextSize, autoSizeMaxTextSize i 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 pozwalają określić wartości, które TextView wybiera podczas automatycznego określania rozmiaru tekstu.

  • Aby użyć gotowych ustawień do automatycznego skonfigurowania rozmiaru TextView, wywołaj metodę setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit). Podaj tablicę rozmiarów i dowolną jednostkę wymiaru TypedValue dla danego rozmiaru.
  • Aby użyć gotowych rozmiarów do skonfigurowania automatycznego dopasowania rozmiaru TextView w pliku XML, użyj przestrzeni nazw android i ustaw te atrybuty:
    • Ustaw atrybut autoSizeTextType na none lub uniform. Wartość domyślna to none, a opcja jednolite umożliwia równomierne skalowanie obiektu TextView zarówno na osi poziomej, jak i pionowej.
    • Ustaw atrybut autoSizePresetSizes na tablicę gotowych rozmiarów. Aby uzyskać dostęp do tablicy jako zasobu, zdefiniuj ją w pliku 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 ustawień do automatycznego skonfigurowania rozmiaru TextView za pomocą Biblioteki pomocy, wywołaj metodę TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit). Podaj wystąpienie klasy TextView, tablicę rozmiarów i dowolną jednostkę wymiaru TypedValue jako rozmiar.
  • Aby użyć gotowych rozmiarów do skonfigurowania automatycznego dopasowania rozmiaru TextView w pliku XML za pomocą Biblioteki pomocy, użyj przestrzeni nazw app i ustaw atrybuty autoSizeTextType i 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

Więcej informacji o automatycznym określaniu rozmiaru elementu TextView podczas pracy z zawartością dynamiczną znajdziesz w filmie na Android Jetpack: Autosizing TextView.