Android控件属性(5) - autoSizeMinTextSize、autoSizeMaxTextSize、autoSizeTextType等属性

主要适用于TextView,让文本尽可能占满控件(文本太长时自动减小字体尺寸,而文本短时则自动增大字体尺寸),是Android 8.0开始提供的功能。

例如下面的TexyView:

    android:layout_width="105dp"
    android:layout_height="70dp"
    android:text="a b c"
    android:textSize="12sp" />

 

在设计器里的显示效果为:

Android控件属性(5) - autoSizeMinTextSize、autoSizeMaxTextSize、autoSizeTextType等属性_第1张图片

如果想让"a b c"自动扩大尺寸以充分填满TextView,则将autoSizeTextType设置为"uniform"(autoSizeTextType只有"uniform"和"none"两种可取值),并且将最大允许尺寸(属性autoSizeMaxTextSize)设置为60sp:

             android:layout_width="105dp"
        android:layout_height="70dp"
        android:text="a b c"
        android:textSize="12sp"
        android:autoSizeMaxTextSize="60sp"
        android:autoSizeTextType="uniform" />

显示效果则为:
Android控件属性(5) - autoSizeMinTextSize、autoSizeMaxTextSize、autoSizeTextType等属性_第2张图片

相反的,当文本很长,但又想自动缩小字体尺寸,以在TextView内单行全部显示时,则可以设置autoSizeTextType和autoSizeMinTextSize属性,如下面的TextView:

    
        android:layout_width="105dp"
        android:layout_height="70dp"
        android:maxLines="1"
        android:text="a b c e f g h I j k l m n o p q r"
        android:textSize="12sp"/>

显示效果为:

Android控件属性(5) - autoSizeMinTextSize、autoSizeMaxTextSize、autoSizeTextType等属性_第3张图片

设置autoSizeTextType和autoSizeMinTextSize属性:

             android:layout_width="105dp"
        android:layout_height="70dp"
        android:maxLines="1"
        android:text="a b c e f g h I j k l m n o p q r"
        android:textSize="12sp"
        android:autoSizeMinTextSize="8sp"
        android:autoSizeTextType="uniform" />

显示效果则为:

Android控件属性(5) - autoSizeMinTextSize、autoSizeMaxTextSize、autoSizeTextType等属性_第4张图片

如果要在早于Android 8.0的平台上运行,则应使用控件android.support.v7.widget.AppCompatTextView,而非TextView,且autoSizeTextType等属性的前缀应改为app。

autoSizeStepGranularity属性取值为字体尺寸,如"1sp"、"2sp"等,指定Android在搜索最佳字体尺寸时的迭代步长。

autotoSizePresetSizes则指定了所有尺寸的候选值,是数组类型,需要先在values/arrays.xml里定义一个数组,如下例:

xml version="1.0" encoding="utf-8"?>

    
        12sp
        16sp
    

然后autoSizePresetSizes属性引用这个数组:

    ......
    android:autoSizePresetSizes="@array/sizes" />

autotoSizePresetSizes的优先级高于autoSizeStepGranularity(即同时设置了autotoSizePresetSizes和autoSizeStepGranularity,则autoSizeStepGranularity的值将被忽略)。

你可能感兴趣的:(Android)