Android 設(shè)置TextView自動調(diào)整字體大小

Android 設(shè)置TextView自動調(diào)整字體大小

意為:TextView字體大小隨著控件的大小變化而變化,Android 8.0(API26)新增,但兼容庫 com.android.support:appcompat-v7:26.0.0版本以上已完全兼容到 API14

android_auto_size.gif

有三種設(shè)置方式:

  • 默認(rèn)
  • 粒度
  • 預(yù)設(shè)大小

1.默認(rèn)

允許TextView在水平軸和垂直軸上均勻地自動調(diào)整刻度。

1.1.原生設(shè)置

xml設(shè)置

<TextView
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:autoSizeTextType="uniform" />

代碼設(shè)置

// 參數(shù): int autoSizeTextType
textView.setAutoSizeTextTypeWithDefaults(TextView.AUTO_SIZE_TEXT_TYPE_UNIFORM);

1.2.兼容庫設(shè)置

xml設(shè)置

<TextView
    android:layout_width="match_parent"
    android:layout_height="200dp"
    app:autoSizeTextType="uniform" />

代碼設(shè)置

// 參數(shù): TextView textView, int autoSizeTextType
TextViewCompat.setAutoSizeTextTypeWithDefaults(textView, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);

參數(shù)介紹:
autoSizeTextTypenone: 關(guān)閉自動調(diào)整功能;uniform: 均勻縮放水平軸和垂直軸

2.粒度

允許TextViewMinTextSize-MaxTextSize之間按StepGranularity的值為增量或減量來跳動。

2.1.原生設(shè)置

xml設(shè)置

<TextView
    android:layout_width="match_parent"
    android:layout_height="200dp"        
    android:autoSizeMaxTextSize="50sp"
    android:autoSizeMinTextSize="30sp"
    android:autoSizeStepGranularity="2sp"
    android:autoSizeTextType="uniform"/>

代碼設(shè)置

// 參數(shù):int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit
textView.setAutoSizeTextTypeUniformWithConfiguration(30, 50, 2, TypedValue.COMPLEX_UNIT_SP);

2.2.兼容庫設(shè)置

xml設(shè)置

<TextView
    android:layout_width="match_parent"
    android:layout_height="200dp"
    app:autoSizeMaxTextSize="50sp"
    app:autoSizeMinTextSize="30sp"
    app:autoSizeStepGranularity="2sp"
    app:autoSizeTextType="uniform" />

代碼設(shè)置

// 參數(shù):TextView textView, int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(textView, 30, 50, 2, TypedValue.COMPLEX_UNIT_SP);

參數(shù)介紹:
autoSizeMaxTextSize:最大值
autoSizeMinTextSize:最小值
autoSizeStepGranularity:粒度值,即每次增量或減量的值

總結(jié):

1.粒度xml設(shè)置時必須設(shè)置autoSizeTextType="uniform",代碼設(shè)置setAutoSizeTextTypeUniformWithConfiguration時則已設(shè)置
2.默認(rèn)設(shè)置其實(shí)minTextSize = 12sp、maxTextSize = 112sp、granularity = 1px的粒度設(shè)置

3.預(yù)設(shè)大小

允許TextView設(shè)置自動調(diào)整字體大小跳動時所選的值 。

3.1.原生設(shè)置

xml設(shè)置

<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>

代碼設(shè)置

int[] presetSizes = getResources().getIntArray(R.array.auto_size_text_sizes_code);
// 參數(shù):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.兼容庫設(shè)置

xml設(shè)置

<TextView
    android:layout_width="match_parent"
    android:layout_height="200dp"
    app:autoSizePresetSizes="@array/auto_size_text_sizes"
    app:autoSizeTextType="uniform" />

代碼設(shè)置

int[] presetSizes = getResources().getIntArray(R.array.auto_size_text_sizes_code);
// 參數(shù):TextView textView, int[] presetSizes, int unit
TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(textView, presetSizes, TypedValue.COMPLEX_UNIT_SP);

參數(shù)介紹:
autoSizePresetSizes:預(yù)設(shè)大小的數(shù)組,建議放到res/values/arrays.xml文件里

總結(jié):

1.預(yù)設(shè)大小xml設(shè)置時可以不設(shè)置autoSizeTextType="uniform",xml設(shè)置autoSizePresetSizes和代碼設(shè)置setAutoSizeTextTypeUniformWithPresetSizes時都已判斷如果autoSizePresetSizes數(shù)組的size>0則設(shè)置autoSizeTextType="uniform"
2.默認(rèn)設(shè)置其實(shí)minTextSize = 12sp、maxTextSize = 112sp、granularity = 1px的粒度設(shè)置

Demo github地址: devblog androidAutoSize
個人博客地址: devbolg

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容