Autosizing TextViews
Demo地址:AutosizingTextViewDemo
在Android O中,TextView可用自动放大或缩小文本的大小,以便根据TextView的属性和边界填充其布局。这样设置可以更轻松地在不同屏幕上优化动态内容的文本大小。
Support 26支持在运行Android 8.0(API 26)之前版本的设备上自动调整TextView功能,最低API要求是 API 14。在android.support.v4.widget中的TextViewCompat类,以兼容此特性。
设置TextView自动调整大小
可以使用框架或支持库以编程方式或以XML格式设置TextView的自动调整大小。要设置XML属性,还可以使用Android Studio中的“Attribute”窗口。
有三种方式可以设置TextView的自动调整大小:
- 默认(Default)
- 间隔尺寸(Granularity)
- 预设尺寸(Preset Sizes)
注意:如果在XML文件中设置自动调整,则不建议对TextView的layout_width或layout_height属性使用值“wrap_content”。
默认(Default)
默认设置使TextView的自动调整尺寸在水平轴和垂直轴上均匀。
android:layout_
android:layout_
android:autoSizeTextType="uniform" />
使用支持库
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_>
android:layout_
android:layout_
app:autoSizeTextType="uniform" />
间隔尺寸(Granularity)
可以定义最小和最大文本尺寸的范围以及指定每个步长的尺寸。TextView在最小和最大文本尺寸之间的范围内均匀地缩放。每个增量按照autoSizeStepGranularity属性中设置的步长进行缩放。
android:layout_
android:layout_
android:autoSizeTextType="uniform"
android:autoSizeMinTextSize="12sp"
android:autoSizeMaxTextSize="100sp"
android:autoSizeStepGranularity="2sp" />
使用支持库
要以编程方式定义文本大小和尺寸范围,调用TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) ,提供以下参数:
- autoSizeMinTextSize:最小值
- autoSizeMaxTextSize:最大值
- autoSizeStepGranularity:步长
- unit:任何TypedValue尺寸单位
要在XML中定义一系列文本大小和尺寸,使用app命名空间并设置以下属性:
- app:autoSizeTextType:none或uniform
- app:autoSizeMinTextSize
- app:autoSizeMaxTextSize
- app:autoSizeStepGranularity
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_>
android:layout_
android:layout_
app:autoSizeTextType="uniform"
app:autoSizeMinTextSize="12sp"
app:autoSizeMaxTextSize="100sp"
app:autoSizeStepGranularity="2sp" />
预设尺寸(Preset Sizes)
预设尺寸可以让在自动自动调整文本时TextView选择的所有指定的值。
- 10sp
- 12sp
- 20sp
- 40sp
- 100sp
android:layout_
android:layout_
android:autoSizeTextType="uniform"
android:autoSizePresetSizes="@array/autosize_text_sizes" />
使用支持库
以编程方式设置TextView的自动调整,TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit),提供以下参数
- textView
- presetSizes::指定的文本尺寸列表
- unit:任何TypedValue尺寸单位
在设置XML中设置TextView自动调整大小,使用app命名空间并设置以下属性。在res/values/ arrays.xml文件中定义尺寸数组,将尺寸数组作为资源访问:
- app:autoSizeTextType:none或uniform
- app:autoSizePresetSizes
- 10sp
- 12sp
- 20sp
- 40sp
- 100sp
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_>
android:layout_
android:layout_
app:autoSizeTextType="uniform"
app:autoSizePresetSizes="@array/autosize_text_sizes" />