Größe von TextViews automatisch anpassen

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 Sie AUTO_SIZE_TEXT_TYPE_NONE an, um die Funktion zur automatischen Größenanpassung zu deaktivieren, oder AUTO_SIZE_TEXT_TYPE_UNIFORM, um die horizontale und vertikale Achse einheitlich zu skalieren.
  • Hinweis: Die Standardabmessungen für die einheitliche Skalierung sind minTextSize = 12sp, maxTextSize = 112sp und granularity = 1px..

  • Wenn du die Standardeinstellung in XML definieren möchtest, verwende den Namespace android und setze das Attribut autoSizeTextType auf none oder uniform.
  • <?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 des TextView-Widgets und einen der Texttypen an, z. B. TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE oder TextViewCompat.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 Attribut autoSizeTextType 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 beliebige TypedValue-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 kann TextView einheitlich auf horizontalen und vertikalen Achsen skaliert werden.
    • Legen Sie die Attribute autoSizeMinTextSize, autoSizeMaxTextSize und autoSizeStepGranularity fest, um die Abmessungen für die automatische Größenanpassung von TextView zu definieren.
  • <?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 beliebige TypedValue-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 Attribute autoSizeText, autoSizeMinTextSize, autoSizeMaxTextSize und autoSizeStepGranularity 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 Methode setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit) auf. Geben Sie ein Array mit Größen und eine beliebige TypedValue-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 Namespace android 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 kann TextView 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 Datei res/values/arrays.xml, um auf das Array als Ressource zuzugreifen.
  • <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 Methode TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit) auf. Geben Sie eine Instanz der TextView-Klasse, ein Array mit Größen und eine beliebige TypedValue-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 Namespace app und legen Sie die Attribute autoSizeTextType und autoSizePresetSizes 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.