Größe von TextViews automatisch anpassen

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 Deaktivieren AUTO_SIZE_TEXT_TYPE_NONE angeben die automatische Größenanpassung oder AUTO_SIZE_TEXT_TYPE_UNIFORM, um die horizontalen und vertikalen Achsen gleichförmig skalieren.
  • Hinweis: Die Standardabmessungen für einheitliche Skalierung minTextSize = 12sp, maxTextSize = 112sp und granularity = 1px.

  • Verwenden Sie den Namespace android, um die Standardeinstellung in XML zu definieren. und legen autoSizeTextType-Attribut 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 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 des TextView-Widgets und einen der Texttypen an. wie TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE oder TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
  • Um die Standardeinstellung in XML über die Support Library zu definieren, verwende die Methode app-Namespace und legen Sie den autoSizeTextType fest 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 alle TypedValue Dimensionseinheit.
  • 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 autoSizeTextType entweder auf none oder uniform. Der Wert none ist die Standardeinstellung. Mit uniform TextView skaliert gleichmäßig horizontal und vertikalen Achsen.
    • Legen Sie autoSizeMinTextSize fest, autoSizeMaxTextSize, und autoSizeStepGranularity zum Definieren der Dimensionen für die automatische Größenanpassung von 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" />
    

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 beliebige TypedValue-Dimensionseinheit.
  • Um einen Bereich von Textgrößen und eine Dimension in XML über die Bibliothek, verwenden Sie den Namespace app und legen Sie den autoSizeText, autoSizeMinTextSize, autoSizeMaxTextSize und autoSizeStepGranularity-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, TextView programmatisch aufrufen, setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit) . Geben Sie ein Array mit Größen und alle TypedValue an Dimensionseinheit für die Größe.
  • Wenn Sie voreingestellte Größen verwenden möchten, TextView in XML, android verwenden Namespace und legen Sie die folgenden Attribute fest: <ph type="x-smartling-placeholder">
      </ph>
    • autoSizeTextType festlegen entweder auf none oder uniform. Der Parameter none ist der Standardwert und mit uniform TextView skaliert gleichmäßig horizontal und vertikalen Achsen.
    • Legen Sie die autoSizePresetSizes einem Array voreingestellter Größen hinzu. Um auf das Array als Ressource, definiere das Array in res/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, TextView programmatisch 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 Klasse TextView an, eine und eine beliebige TypedValue-Dimensionseinheit für die Größe ändern.
  • Wenn Sie voreingestellte Größen verwenden möchten, TextView in XML über die Support Library, verwenden Sie die app-Namespace und legen Sie autoSizeTextType und autoSizePresetSizes-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