В Android 8.0 (уровень API 26) и более поздних версиях вы можете указать TextView
автоматически увеличивать или уменьшать размер текста, чтобы заполнить его макет на основе характеристик и границ TextView
. Этот параметр упрощает оптимизацию размера текста на разных экранах с динамическим контентом.
Библиотека поддержки 26.0 полностью поддерживает функцию автоматического изменения размера TextView
на устройствах под управлением Android версии 8.0 (уровень API 26) или ниже. Пакет android.support.v4.widget
содержит класс TextViewCompat
для доступа к функциям с обратной совместимостью.
Настроить авторазмер TextView
Вы можете использовать платформу или библиотеку поддержки для настройки автоматического изменения размера TextView
программно или в XML. Чтобы установить атрибуты XML, вы также можете использовать окно «Свойства» в Android Studio.
Существует три способа настройки автоматического изменения размера TextView
, описанные в следующих разделах:
Примечание . Если вы установили автоматическое изменение размера в XML-файле, мы не рекомендуем использовать значение «wrap_content» для атрибутов layout_width
или layout_height
TextView
. Это может привести к неожиданным результатам.
По умолчанию
Настройка по умолчанию позволяет автоматически масштабировать TextView
равномерно по горизонтальной и вертикальной осям.
- Чтобы программно определить настройку по умолчанию, вызовите метод
setAutoSizeTextTypeWithDefaults(int autoSizeTextType)
. УкажитеAUTO_SIZE_TEXT_TYPE_NONE
, чтобы отключить функцию автоматического изменения размера, илиAUTO_SIZE_TEXT_TYPE_UNIFORM
, чтобы равномерно масштабировать горизонтальную и вертикальную оси. - Чтобы определить настройку по умолчанию в XML, используйте пространство имен
android
и установите для атрибутаautoSizeTextType
значение none или Uniform .
Примечание . Размеры по умолчанию для равномерного масштабирования: minTextSize = 12sp
, maxTextSize = 112sp
и granularity = 1px.
<?xml version="1.0" encoding="utf-8"?> <TextView android:layout_width="match_parent" android:layout_height="200dp" android:autoSizeTextType="uniform" />
Определите настройку по умолчанию с помощью библиотеки поддержки.
- Чтобы программно определить настройку по умолчанию через библиотеку поддержки, вызовите метод
TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType)
. Предоставьте экземпляр виджетаTextView
и один из типов текста, напримерTextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE
илиTextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
. - Чтобы определить настройку по умолчанию в XML через библиотеку поддержки, используйте пространство имен
app
и установите для атрибутаautoSizeTextType
значение none или 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>
Детализация
Вы можете определить диапазон минимального и максимального размеров текста, а также размер, определяющий размер каждого шага. TextView
масштабируется равномерно в диапазоне между атрибутами минимального и максимального размера. Каждое приращение происходит как размер шага, установленный в атрибуте детализации.
- Чтобы программно определить диапазон размеров текста и размерность, вызовите метод
setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
. Укажите максимальное значение, минимальное значение, значение детализации и любую единицу измеренияTypedValue
. - Чтобы определить диапазон размеров текста и размерность в XML, используйте пространство имен
android
и установите следующие атрибуты:- Установите для атрибута
autoSizeTextType
значение none или Uniform . Значение none является значением по умолчанию, а значение Uniform позволяетTextView
равномерно масштабироваться по горизонтальной и вертикальной осям. - Установите атрибуты
autoSizeMinTextSize
,autoSizeMaxTextSize
иautoSizeStepGranularity
, чтобы определить размеры для автоматического изменения размера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" />
Определите степень детализации с помощью библиотеки поддержки.
- Чтобы определить диапазон размеров текста и размер программно через библиотеку поддержки, вызовите метод
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
. Укажите максимальное значение, минимальное значение, значение детализации и любую единицу измеренияTypedValue
. - Чтобы определить диапазон размеров текста и размерность в XML через библиотеку поддержки, используйте пространство имен
app
и установите атрибутыautoSizeText
,autoSizeMinTextSize
,autoSizeMaxTextSize
иautoSizeStepGranularity
в XML-файле макета.
<?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>
Предустановленные размеры
Предустановленные размеры позволяют указать значения, которые TextView
выбирает при автоматическом изменении размера текста.
- Чтобы использовать предустановленные размеры для программной настройки автоматического изменения размера
TextView
, вызовите методsetAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit)
. Укажите массив размеров и любую единицу измеренияTypedValue
для этого размера. - Чтобы использовать предустановленные размеры для настройки автоматического изменения размера
TextView
в XML, используйте пространство именandroid
и установите следующие атрибуты:- Установите для атрибута
autoSizeTextType
значение none или Uniform . Значение none является значением по умолчанию, а значение Uniform позволяетTextView
равномерно масштабироваться по горизонтальной и вертикальной осям. - Установите для атрибута
autoSizePresetSizes
массив предустановленных размеров. Чтобы получить доступ к массиву как к ресурсу, определите массив в файле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" />
Настройте предустановленные размеры с помощью библиотеки поддержки.
- Чтобы использовать предустановленные размеры для программной настройки автоматического изменения размера
TextView
через библиотеку поддержки, вызовите методTextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit)
. Предоставьте экземпляр классаTextView
, массив размеров и любую единицу измеренияTypedValue
для этого размера. - Чтобы использовать предустановленные размеры для настройки автоматического изменения размера
TextView
в XML через библиотеку поддержки, используйте пространство именapp
и установите атрибутыautoSizeTextType
иautoSizePresetSizes
в 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"?> <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>
Дополнительные ресурсы
Дополнительную информацию об автоматическом изменении размера TextView
при работе с динамическим содержимым см. в статье Android Jetpack: Autosizing TextView .