Unter Android 8.0 (API-Level 26) und höher kannst du ein TextView
anweisen, die Textgröße automatisch zu vergrößern oder zu verkleinern, um das Layout entsprechend den Eigenschaften und Grenzen der TextView
zu füllen. Mit dieser Einstellung lässt sich die Textgröße auf verschiedenen Bildschirmen mit dynamischen Inhalten leichter optimieren.
Die Supportbibliothek 26.0 unterstützt die Funktion TextView
zur automatischen Größenanpassung auf Geräten mit Android 8.0 (API-Level 26) oder niedriger vollständig.
Das Paket android.support.v4.widget
enthält die Klasse TextViewCompat
für den Zugriff auf Funktionen abwärtskompatibel.
Automatische TextView-Größe einrichten
Sie können die automatische Größenanpassung von TextView
entweder mit dem Framework oder der Supportbibliothek programmatisch oder in XML einrichten. Sie können die XML-Attribute auch im Fenster Eigenschaften in Android Studio festlegen.
Es gibt drei Möglichkeiten, die automatische Größenanpassung von TextView
einzurichten, die in den folgenden Abschnitten beschrieben werden:
Hinweis: Wenn Sie die automatische Größenanpassung in einer XML-Datei festlegen, raten wir davon ab, den Wert „wrap_content“ für die Attribute layout_width
oder layout_height
von TextView
zu verwenden. Das kann zu unerwarteten Ergebnissen führen.
Standard
Mit der Standardeinstellung kann die automatische Größenanpassung von TextView
gleichmäßig auf horizontalen und vertikalen Achsen skaliert werden.
- Wenn Sie die Standardeinstellung programmatisch definieren möchten, rufen Sie die Methode
setAutoSizeTextTypeWithDefaults(int autoSizeTextType)
auf. Geben SieAUTO_SIZE_TEXT_TYPE_NONE
an, um die Funktion zur automatischen Größenanpassung zu deaktivieren, oderAUTO_SIZE_TEXT_TYPE_UNIFORM
, um die horizontale und vertikale Achse einheitlich zu skalieren. - Wenn du die Standardeinstellung in XML definieren möchtest, verwende den Namespace
android
und setze das AttributautoSizeTextType
auf none oder uniform.
Hinweis: Die Standardabmessungen für die einheitliche Skalierung sind minTextSize = 12sp
, maxTextSize = 112sp
und granularity = 1px.
.
<?xml version="1.0" encoding="utf-8"?> <TextView android:layout_width="match_parent" android:layout_height="200dp" android:autoSizeTextType="uniform" />
Standardeinstellung mithilfe der Support Library festlegen
- Wenn Sie die Standardeinstellung programmatisch über die Supportbibliothek definieren möchten, rufen Sie die Methode
TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType)
auf. Geben Sie eine Instanz desTextView
-Widgets und einen der Texttypen an, z. B.TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE
oderTextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
. - Wenn du die Standardeinstellung in XML über die Support Library definieren möchtest, verwende den Namespace
app
und setze das AttributautoSizeTextType
auf none oder 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>
Navigationseinheit
Sie können einen Bereich von Mindest- und Höchsttextgrößen sowie eine Dimension definieren, die die Größe der einzelnen Schritte angibt. TextView
wird gleichmäßig in einem Bereich zwischen den Attributen der Mindest- und Maximalgröße skaliert. Jedes Inkrement erfolgt gemäß der im Attribut „Detaillierungsgrad“ festgelegten Schrittgröße.
- Wenn Sie einen Bereich von Textgrößen und einer Dimension programmatisch definieren möchten, rufen Sie die Methode
setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
auf. Geben Sie den Maximalwert, den Mindestwert, den Detaillierungsgrad und eine beliebigeTypedValue
-Dimensionseinheit an. - Wenn Sie einen Bereich von Textgrößen und eine Dimension in XML definieren möchten, verwenden Sie den
android
-Namespace und legen Sie die folgenden Attribute fest:- Legen Sie das Attribut
autoSizeTextType
entweder auf none oder uniform fest. Der Wert none ist die Standardeinstellung. Mit uniform kannTextView
einheitlich auf horizontalen und vertikalen Achsen skaliert werden. - Legen Sie die Attribute
autoSizeMinTextSize
,autoSizeMaxTextSize
undautoSizeStepGranularity
fest, um die Abmessungen für die automatische Größenanpassung vonTextView
zu definieren.
- Legen Sie das Attribut
<?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" />
Detaillierungsgrad mithilfe der Supportbibliothek definieren
- Wenn Sie einen Bereich von Textgrößen und eine Dimension programmatisch über die Supportbibliothek definieren möchten, rufen Sie die Methode
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
auf. Geben Sie den Maximalwert, den Mindestwert, den Detaillierungsgrad und eine beliebigeTypedValue
-Dimensionseinheit an. - Wenn Sie einen Bereich von Textgrößen und eine Dimension in XML über die Supportbibliothek definieren möchten, verwenden Sie den Namespace
app
und legen Sie die AttributeautoSizeText
,autoSizeMinTextSize
,autoSizeMaxTextSize
undautoSizeStepGranularity
in der Layout-XML-Datei fest.
<?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>
Voreingestellte Größen
Mit voreingestellten Größen können Sie die Werte angeben, die TextView
bei der automatischen Textanpassung auswählt.
-
Wenn Sie voreingestellte Größen verwenden möchten, um die automatische Größenanpassung von
TextView
programmatisch einzurichten, rufen Sie die MethodesetAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit)
auf. Geben Sie ein Array mit Größen und eine beliebigeTypedValue
-Dimensionseinheit für die Größe an. -
Wenn Sie voreingestellte Größen verwenden möchten, um die automatische Größenanpassung von
TextView
in XML einzurichten, verwenden Sie den Namespaceandroid
und legen Sie die folgenden Attribute fest:- Legen Sie das Attribut
autoSizeTextType
entweder auf none oder uniform fest. Der Wert none ist die Standardeinstellung. Mit uniform kannTextView
einheitlich auf horizontalen und vertikalen Achsen skaliert werden. - Legen Sie für das Attribut
autoSizePresetSizes
ein Array voreingestellter Größen fest. Definieren Sie das Array in der Dateires/values/arrays.xml
, um auf das Array als Ressource zuzugreifen.
- Legen Sie das Attribut
<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" />
Voreingestellte Größen mithilfe der Support Library einrichten
- Wenn Sie voreingestellte Größen verwenden möchten, um die automatische Größenanpassung von
TextView
programmatisch über die Supportbibliothek einzurichten, rufen Sie die MethodeTextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit)
auf. Geben Sie eine Instanz derTextView
-Klasse, ein Array mit Größen und eine beliebigeTypedValue
-Dimensionseinheit für die Größe an. - Wenn Sie voreingestellte Größen verwenden möchten, um die automatische Größenanpassung von
TextView
in XML über die Supportbibliothek einzurichten, verwenden Sie den Namespaceapp
und legen Sie die AttributeautoSizeTextType
undautoSizePresetSizes
in der Layout-XML-Datei fest.
<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>
Weitere Informationen
Weitere Informationen zur automatischen Größenanpassung von TextView
bei dynamischen Inhalten finden Sie im Video Android Jetpack: Autosizing TextView.