自動調整 TextView 大小

在 Android 8.0 (API 級別 26) 以上版本中,您可以指示 TextView 可讓文字大小 可根據以下項目自動展開或縮小: TextView 的特性和界線。方便您 運用動態內容,調整不同螢幕上的文字大小

支援資料庫 26.0 完整支援自動調整 TextView 功能 功能。 android.support.v4.widget 套件包含 TextViewCompat 類別,以回溯相容的方式存取功能。

設定 TextView 自動調整大小

您可以使用架構或支援資料庫,設定自動調整 TextView。如要設定 XML 屬性,您也可以使用 Android Studio 中的「屬性」視窗

你可以透過三種方式設定 TextView 的自動調整大小功能。 ,

注意:如果您在 XML 檔案中設定自動調整大小,我們不會 建議使用「wrap_content」值的 layout_widthlayout_height 屬性 TextView。這可能會導致 非預期的結果

預設

預設設定是允許自動調整 TextView 縮放比例 水平和垂直軸一致。

  • 如要透過程式輔助定義預設設定,請呼叫 setAutoSizeTextTypeWithDefaults(int autoSizeTextType) 方法,增加圍繞地圖邊緣的邊框間距。請提供AUTO_SIZE_TEXT_TYPE_NONE才能關閉 自動調整大小功能,或為 AUTO_SIZE_TEXT_TYPE_UNIFORM 將水平軸和垂直軸等距統一縮放。
  • 注意:均勻縮放的預設維度為 minTextSize = 12spmaxTextSize = 112spgranularity = 1px.

  • 如要在 XML 中定義預設設定,請使用 android 命名空間 並設定 autoSizeTextType 屬性設為 none統一
  • <?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_NONETextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
  • 如要透過支援資料庫定義 XML 中的預設設定,請使用 app 命名空間並設定 autoSizeTextType 屬性設為 noneuniform
  • <?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 在最小和最大維度屬性之間的範圍內均勻縮放。每個遞增單位 請在精細程度屬性中設定的尺寸

使用支援資料庫定義精細程度

  • 如要透過 支援資料庫,然後將 TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) 方法。請提供最大值、最小值、精細程度 以及任何 TypedValue 尺寸單位。
  • 如何透過 Support 在 XML 中定義某段文字大小和維度 程式庫,使用 app 命名空間,然後將 autoSizeTextautoSizeMinTextSizeautoSizeMaxTextSizeautoSizeStepGranularity 屬性。
  • <?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 維度單元。
  • 如要使用預設大小來設定 XML 中的 TextView 自動調整大小功能,請使用 android 命名空間並設定下列屬性:
    • 設定 autoSizeTextType 屬性設為 noneuniform 值為預設值,而 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 尺寸單位 大小
  • 如要使用預設大小來設定自動調整 透過支援資料庫以 XML 形式呈現 TextView,並使用 app 命名空間,然後將 autoSizeTextType 和 版面配置 XML 檔案中的 autoSizePresetSizes 屬性。
  • <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:自動調整 TextView