簡評: Auto-Sizing TextViews —— 當 TextView 的佈局邊界尺寸發生變化時,文本大小可以跟着自動縮放調整。
有時候我們需要 TextView 根據放入的內容來改變其文本大小,之前 Android 對此並沒有太多的支持,在 Android O 之後,新增了這項功能。讓我們看看是怎麼一回事 ~
首先,在 build.gradle 文件中添加 v26 支持庫或更高的版本。
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:support-v4:26.1.0'
通過使用支持庫,此功能可以兼容 Android 4.0 及更高的版本。然後添加一個 TextView:
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="100dp"
android:text="Hello Any Small Text Goes Here"/>
現在在 TextView 中添加 app:autoSizeTextType="uniform":
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="100dp"
app:autoSizeTextType="uniform"
android:text="Hello Any Small Text Goes Here"/>
你也可以使用這行代碼在 Java/Kotlin 執行此操作
TextViewCompat.setAutoSizeTextTypeWithDefaults(myTextView,
TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);
如果在 XML 文件中設置了自動調整大小,則不建議將該值"wrap_content"
用於layout_width
或layout_height
的某個屬性TextView
。
根據需要,還有兩種方法可以調整文本大小:
- Granularity(粒度型)
- Preset Sizes(預置大小型)
粒度型
此模式下,通過設置最小值和最大值來確定一個文本大小變化範圍,然後設置一個變化粒度值,TextView 就能夠以該粒度值爲增減變量,在變化範圍內動態縮放文本大小。
在 XML 中,可以這樣完成:
app:autoSizeMaxTextSize=”100sp”
app:autoSizeMinTextSize=”12sp”
app:autoSizeStepGranularity=”2sp”
app:autoSizeText=”uniform”
在 Java/Kotlin,可以通過調用以下方法來實現:
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(TextView textview, int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit);
// Example
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(myTextView, 12, 100, 2, TypedValue.COMPLEX_UNIT_SP);
預置大小
TextView 可以根據預置的值自動調整文本大小。
在 XML 中,使用 autoSizePresetSizesautoSizePresetSizes
佈局文件中的屬性
android:autoSizeText=”uniform”
android:autoSizePresetSizes=”@array/autosize_text_sizes”
要將數組作爲資源訪問,在 res/values/arrays.xml 文件中定義數組
<array name=”autosize_text_sizes”>
<item>10sp</item>
<item>12sp</item>
<item>20sp</item>
<item>40sp</item>
<item>100sp</item>
</array>
在 Java/Kotlin 可以這樣實現:
TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit);
// Example
int[] sizes = getContext().getResources().getIntArray(R.array.autosize_text_sizes)
TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(myTextView, sizes, TypedValue.COMPLEX_UNIT_SP);
關於 Auto-Sizing TextViews 就先介紹到這裏 ~
原文鏈接:Auto-Sizing TextViews in Android
推薦閱讀:怎樣減少 Android 應用包 60% 的大小?