Ab Android 8.0 (API-Level 26) können Sie einem
TextView, um die Textgröße zu verwenden
automatisch maximiert oder minimiert, um das Layout je nach
Eigenschaften und Grenzen von TextView. Mit dieser Einstellung können Sie
mit dynamischen Inhalten die Textgröße
auf verschiedenen Bildschirmen optimieren.
Die Support Library 26.0 unterstützt die TextView mit automatischer Größenanpassung
auf Geräten mit Android-Version 8.0 (API-Level 26) oder niedriger.
Das Paket android.support.v4.widget enthält das TextViewCompat.
-Klasse, um auf abwärtskompatible Funktionen zuzugreifen.
Automatische Größe von TextView einrichten
Sie können entweder das Framework oder die Support Library verwenden, um die automatische Größenanpassung von
TextView programmatisch oder in XML. Bis
die XML-Attribute festgelegt haben, können Sie auch die Eigenschaften
in Android Studio.
Es gibt drei Möglichkeiten, die automatische Größenanpassung von TextView einzurichten:
die in den folgenden Abschnitten beschrieben werden:
Hinweis: Wenn Sie in einer XML-Datei die automatische Größenanpassung festlegen,
empfohlen, der Wert „wrap_content“ zu verwenden für die
layout_width- oder layout_height-Attribut eines
TextView Dies könnte zu
zu unerwarteten Ergebnissen führen.
Standard
In der Standardeinstellung kann die Größe von TextView automatisch angepasst werden.
gleichmäßig auf horizontalen und vertikalen Achsen verteilt.
- Um die Standardeinstellung programmatisch zu definieren, rufen Sie die Methode
<ph type="x-smartling-placeholder"></ph>
setAutoSizeTextTypeWithDefaults(int autoSizeTextType)-Methode. Zum DeaktivierenAUTO_SIZE_TEXT_TYPE_NONEangeben die automatische Größenanpassung oderAUTO_SIZE_TEXT_TYPE_UNIFORM, um die horizontalen und vertikalen Achsen gleichförmig skalieren. - Verwenden Sie den Namespace
android, um die Standardeinstellung in XML zu definieren. und legenautoSizeTextType-Attribut auf none oder Uniform.
Hinweis: Die Standardabmessungen für einheitliche
Skalierung 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 definieren
- Um die Standardeinstellung programmatisch über die Support Library zu definieren,
ruf die
<ph type="x-smartling-placeholder"></ph>
TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType). . Geben Sie eine Instanz desTextView-Widgets und einen der Texttypen an. wieTextViewCompat.AUTO_SIZE_TEXT_TYPE_NONEoderTextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM - Um die Standardeinstellung in XML über die Support Library zu definieren, verwende die Methode
app-Namespace und legen Sie denautoSizeTextTypefest 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>
Leseeinheit
Sie können einen Bereich von minimalen und maximalen Textgrößen sowie eine
die die Größe der einzelnen Schritte angibt. Die
TextView skaliert einheitlich in einem Bereich zwischen den
für die Mindest- und Maximalgröße. Jedes Inkrement erfolgt als Schritt
die im Attribut „Detaillierungsgrad“ festgelegt ist.
- Um einen Textgrößenbereich und eine Dimension programmatisch zu definieren, rufen Sie
die
setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit). Geben Sie den Höchst- und Mindestwert sowie den Detaillierungsgrad an. Wert und alleTypedValueDimensionseinheit. - Um einen Textgrößenbereich und eine Dimension in XML zu definieren, verwende die
android. Namespace und Set folgende Attribute: <ph type="x-smartling-placeholder">- </ph>
- Legen Sie die
autoSizeTextTypeentweder auf none oder uniform. Der Wert none ist die Standardeinstellung. Mit uniformTextViewskaliert gleichmäßig horizontal und vertikalen Achsen. - Legen Sie
autoSizeMinTextSizefest,autoSizeMaxTextSize, undautoSizeStepGranularityzum Definieren der Dimensionen für die automatische Größenanpassung vonTextView
- Legen Sie die
<?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 Support Library definieren
- Um einen Bereich von Textgrößen und eine Dimension programmatisch über die
Support Library, unter der
<ph type="x-smartling-placeholder"></ph>
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit). . Geben Sie den Maximalwert, den Minimalwert, den Detaillierungsgrad und eine beliebigeTypedValue-Dimensionseinheit. - Um einen Bereich von Textgrößen und eine Dimension in XML über die
Bibliothek, verwenden Sie den Namespace
appund legen Sie denautoSizeText,autoSizeMinTextSize,autoSizeMaxTextSizeundautoSizeStepGranularity-Attribute in der Layout-XML-Datei angeben.
<?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 vordefinierten Größen können Sie die Werte angeben,
Auswahlmöglichkeiten für die automatische Textgröße von TextView.
-
Wenn Sie voreingestellte Größen verwenden möchten,
TextViewprogrammatisch aufrufen,setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit). Geben Sie ein Array mit Größen und alleTypedValuean Dimensionseinheit für die Größe. -
Wenn Sie voreingestellte Größen verwenden möchten,
TextViewin XML,androidverwenden Namespace und legen Sie die folgenden Attribute fest: <ph type="x-smartling-placeholder">- </ph>
autoSizeTextTypefestlegen entweder auf none oder uniform. Der Parameter none ist der Standardwert und mit uniformTextViewskaliert gleichmäßig horizontal und vertikalen Achsen.- Legen Sie die
autoSizePresetSizeseinem Array voreingestellter Größen hinzu. Um auf das Array als Ressource, definiere das Array inres/values/arrays.xml. -Datei.
<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 in der Supportbibliothek einrichten
- Wenn Sie voreingestellte Größen verwenden möchten,
TextViewprogrammatisch Support-Bibliothek erhalten haben, rufen Sie die <ph type="x-smartling-placeholder"></ph>TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit). Geben Sie eine Instanz der KlasseTextViewan, eine und eine beliebigeTypedValue-Dimensionseinheit für die Größe ändern. - Wenn Sie voreingestellte Größen verwenden möchten,
TextViewin XML über die Support Library, verwenden Sie dieapp-Namespace und legen SieautoSizeTextTypeundautoSizePresetSizes-Attribute in der Layout-XML-Datei angeben.
<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 eines TextView bei der Arbeit mit dynamischen
Inhalt, ansehen
Android Jetpack: Automatische Skalierung von TextView