Android 設置TextView自動調整字體大小
TextView字體大小隨着控件的大小變化而變化,Android 8.0(API26)新增,但兼容庫 com.android.support:appcompat-v7:26.0.0版本以上已完全兼容到 API14
先上圖:
有三種設置方式:
默認
粒度
預設大小
1.默認
允許TextView在水平軸和垂直軸上均勻地自動調整刻度。
1.1.原生設置
xml設置
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
android:autoSizeTextType="uniform" />
代碼設置
// 參數: int autoSizeTextType
textView.setAutoSizeTextTypeWithDefaults(TextView.AUTO_SIZE_TEXT_TYPE_UNIFORM);
1.2.兼容庫設置
xml設置
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
app:autoSizeTextType="uniform" />
代碼設置
// 參數: TextView textView, int autoSizeTextType
TextViewCompat.setAutoSizeTextTypeWithDefaults(textView, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);
參數介紹:
autoSizeTextType:none: 關閉自動調整功能;uniform: 均勻縮放水平軸和垂直軸
2.粒度
允許TextView在MinTextSize-MaxTextSize之間按StepGranularity的值爲增量或減量來跳動。
2.1.原生設置
xml設置
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
android:autoSizeMaxTextSize="50sp"
android:autoSizeMinTextSize="30sp"
android:autoSizeStepGranularity="2sp"
android:autoSizeTextType="uniform"/>
代碼設置
// 參數:int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit
textView.setAutoSizeTextTypeUniformWithConfiguration(30, 50, 2, TypedValue.COMPLEX_UNIT_SP);
2.2.兼容庫設置
xml設置
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
app:autoSizeMaxTextSize="50sp"
app:autoSizeMinTextSize="30sp"
app:autoSizeStepGranularity="2sp"
app:autoSizeTextType="uniform" />
代碼設置
// 參數:TextView textView, int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(textView, 30, 50, 2, TypedValue.COMPLEX_UNIT_SP);
參數介紹:
autoSizeMaxTextSize:最大值
autoSizeMinTextSize:最小值
autoSizeStepGranularity:粒度值,即每次增量或減量的值
總結:
1.粒度xml設置時必須設置autoSizeTextType=“uniform”,代碼設置setAutoSizeTextTypeUniformWithConfiguration時則已設置
2.默認設置其實minTextSize = 12sp、maxTextSize = 112sp、granularity = 1px的粒度設置
3.預設大小
允許TextView設置自動調整字體大小跳動時所選的值 。
3.1.原生設置
xml設置
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
android:autoSizePresetSizes="@array/auto_size_text_sizes"
android:autoSizeTextType="uniform"/>
<array name="auto_size_text_sizes">
<item>10sp</item>
<item>12sp</item>
<item>20sp</item>
<item>40sp</item>
<item>100sp</item>
</array>
代碼設置
int[] presetSizes = getResources().getIntArray(R.array.auto_size_text_sizes_code);
// 參數:int[] presetSizes, int unit
textView.setAutoSizeTextTypeUniformWithPresetSizes(presetSizes, TypedValue.COMPLEX_UNIT_SP);
<array name="auto_size_text_sizes_code">
<item>10</item>
<item>12</item>
<item>20</item>
<item>40</item>
<item>100</item>
</array>
3.2.兼容庫設置
xml設置
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
app:autoSizePresetSizes="@array/auto_size_text_sizes"
app:autoSizeTextType="uniform" />
代碼設置
int[] presetSizes = getResources().getIntArray(R.array.auto_size_text_sizes_code);
// 參數:TextView textView, int[] presetSizes, int unit
TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(textView, presetSizes, TypedValue.COMPLEX_UNIT_SP);
參數介紹:
autoSizePresetSizes:預設大小的數組,建議放到res/values/arrays.xml文件裏
總結:
1.預設大小xml設置時可以不設置autoSizeTextType=“uniform”,xml設置autoSizePresetSizes和代碼設置setAutoSizeTextTypeUniformWithPresetSizes時都已判斷如果autoSizePresetSizes數組的size>0則設置autoSizeTextType=“uniform”
2.默認設置其實minTextSize = 12sp、maxTextSize = 112sp、granularity = 1px的粒度設置
轉載自: link.