主要适用于TextView,让文本尽可能占满控件(文本太长时自动减小字体尺寸,而文本短时则自动增大字体尺寸),是Android 8.0开始提供的功能。
例如下面的TexyView:
<TextView
android:layout_width="105dp"
android:layout_height="70dp"
android:text="a b c"
android:textSize="12sp" />
在设计器里的显示效果为:
如果想让"a b c"自动扩大尺寸以充分填满TextView,则将autoSizeTextType设置为"uniform"(autoSizeTextType只有"uniform"和"none"两种可取值),并且将最大允许尺寸(属性autoSizeMaxTextSize)设置为60sp:
<TextView
android:layout_width="105dp"
android:layout_height="70dp"
android:text="a b c"
android:textSize="12sp"
android:autoSizeMaxTextSize="60sp"
android:autoSizeTextType="uniform" />
显示效果则为:
相反的,当文本很长,但又想自动缩小字体尺寸,以在TextView内单行全部显示时,则可以设置autoSizeTextType和autoSizeMinTextSize属性,如下面的TextView:
<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"/>
显示效果为:
设置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:autoSizeMinTextSize="8sp"
android:autoSizeTextType="uniform" />
显示效果则为:
如果要在早于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"?>
<resources>
<array name="sizes">
<item>12sp</item>
<item>16sp</item>
</array>
</resources>
然后autoSizePresetSizes属性引用这个数组:
<TextView
......
android:autoSizePresetSizes="@array/sizes" />
autotoSizePresetSizes的优先级高于autoSizeStepGranularity(即同时设置了autotoSizePresetSizes和autoSizeStepGranularity,则autoSizeStepGranularity的值将被忽略)。