在 Android 8.0 (API 級別 26) 以上版本中,您可以指示 TextView
根據 TextView
的特性和邊界自動調整文字大小,以填滿版面配置。這項設定可讓您更輕鬆地使用動態內容,對不同畫面中的文字大小進行最佳化調整。
支援資料庫 26.0 在搭載 Android 8.0 (API 級別 26) 以下版本的裝置上完整支援自動調整 TextView
功能。android.support.v4.widget
套件包含 TextViewCompat
類別,以回溯相容的方式存取功能。
設定 TextView 自動調整大小
您可以使用架構或支援資料庫,透過程式輔助或 XML 設定 TextView
的自動調整大小功能。如要設定 XML 屬性,您也可以使用 Android Studio 中的「屬性」視窗。
您可以透過三種方式設定 TextView
的自動調整大小功能,詳情請參閱後續章節:
注意:如果您在 XML 檔案中設定自動調整大小,建議您不要針對 TextView
的 layout_width
或 layout_height
屬性使用「wrap_content」值。這樣做可能會產生非預期的結果。
預設
根據預設設定,TextView
的自動調整大小會在水平軸和垂直軸上均勻縮放。
- 如要透過程式輔助方式定義預設設定,請呼叫
setAutoSizeTextTypeWithDefaults(int autoSizeTextType)
方法。提供AUTO_SIZE_TEXT_TYPE_NONE
關閉自動調整功能,或提供AUTO_SIZE_TEXT_TYPE_UNIFORM
以均勻縮放水平軸和垂直軸。 - 如要在 XML 中定義預設設定,請使用
android
命名空間,並將autoSizeTextType
屬性設為「none」或「uniform」。
注意:均勻縮放的預設維度為 minTextSize = 12sp
、maxTextSize = 112sp
和 granularity = 1px.
<?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_NONE
或TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
。 - 如要透過支援資料庫在 XML 中定義預設設定,請使用
app
命名空間,並將autoSizeTextType
屬性設為「none」或「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>
精細程度
您可以定義最小和最大文字大小的範圍,以及指定每個步驟大小的維度。TextView
在最小和最大維度屬性之間的範圍內均勻縮放。每增加一次,都以精細程度屬性中設定的步數大小產生。
- 如要透過程式輔助來定義文字大小和維度範圍,請呼叫
setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
方法。請提供最大值、最小值、精細程度值與任何TypedValue
維度單位。 - 如要定義 XML 中的文字大小和尺寸範圍,請使用
android
命名空間並設定下列屬性:- 將
autoSizeTextType
屬性設為「無」或「統一」。none 為預設值,統一可讓TextView
在水平軸和垂直軸上統一縮放。 - 設定
autoSizeMinTextSize
、autoSizeMaxTextSize
和autoSizeStepGranularity
屬性,藉此定義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" />
使用支援資料庫定義精細程度
- 如要透過支援資料庫以程式輔助方式定義特定的文字大小和尺寸,請呼叫
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
方法。請提供最大值、最小值、精細程度值與任何TypedValue
維度單位。 - 如要透過支援資料庫在 XML 中定義特定文字大小和尺寸,請使用
app
命名空間,並設定版面配置 XML 檔案中的autoSizeText
、autoSizeMinTextSize
、autoSizeMaxTextSize
和autoSizeStepGranularity
屬性。
<?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
屬性設為「無」或「統一」。無為預設值,統一可讓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
命名空間,並在版面配置 XML 檔案中設定autoSizeTextType
和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:Autosizing TextView」影片。