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 funkcjiAUTO_SIZE_TEXT_TYPE_NONE
, aby wyłączyć funkcję automatycznego określania rozmiaru, lub zasadyAUTO_SIZE_TEXT_TYPE_UNIFORM
, aby równomiernie skalować oś poziomą i pionową. - Aby zdefiniować ustawienie domyślne w formacie XML, użyj przestrzeni nazw
android
i ustaw atrybutautoSizeTextType
na none (brak) lub uniform.
Uwaga: domyślne wymiary dla równomiernego skalowania to minTextSize = 12sp
, maxTextSize = 112sp
i granularity = 1px.
<?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żetuTextView
i jeden z typów tekstu, na przykładTextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE
lubTextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
. - Aby zdefiniować domyślne ustawienie w pliku XML za pomocą biblioteki pomocy, użyj przestrzeni nazw
app
i ustaw atrybutautoSizeTextType
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ę wymiaruTypedValue
. - 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 obiektuTextView
zarówno na osi poziomej, jak i pionowej. - Ustaw atrybuty
autoSizeMinTextSize
,autoSizeMaxTextSize
iautoSizeStepGranularity
, aby zdefiniować wymiary na potrzeby automatycznego rozmiaruTextView
.
- Ustaw atrybut
<?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ę wymiaruTypedValue
. - Aby zdefiniować zakres rozmiarów tekstu i wymiarów w pliku XML za pomocą Biblioteki pomocy, użyj przestrzeni nazw
app
i ustaw atrybutyautoSizeText
,autoSizeMinTextSize
,autoSizeMaxTextSize
iautoSizeStepGranularity
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ę wymiaruTypedValue
dla danego rozmiaru. -
Aby użyć gotowych rozmiarów do skonfigurowania automatycznego dopasowania rozmiaru
TextView
w pliku XML, użyj przestrzeni nazwandroid
i ustaw te atrybuty:- Ustaw atrybut
autoSizeTextType
na none lub uniform. Wartość domyślna to none, a opcja jednolite umożliwia równomierne skalowanie obiektuTextView
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 plikures/values/arrays.xml
.
- Ustaw atrybut
<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 klasyTextView
, tablicę rozmiarów i dowolną jednostkę wymiaruTypedValue
jako rozmiar. - Aby użyć gotowych rozmiarów do skonfigurowania automatycznego dopasowania rozmiaru
TextView
w pliku XML za pomocą Biblioteki pomocy, użyj przestrzeni nazwapp
i ustaw atrybutyautoSizeTextType
iautoSizePresetSizes
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.