APP开发实战177-Autosizing TextViews(自动调整文字大小的TextViews)
Android O允许开发人员制定TextView,可以基于TextView的特性和边界布局自动放到文字或缩小文字以填充布局空间。这使得更容易依据不同尺寸的屏幕和不同的文本内容优化文字尺寸。
从26.0 Beta版的支持库开始,支持此功能运行在装了Android O之前的系统的设备上。这个库支持Android4.0(API level 14)及更高的版本。
可以使用framework或集成支持库,用代码或在XML文件中设置属性的方式实现此功能,具体有以下三种方式:
1 Default
默认设置是让 TextView 实现文字在水平和垂直方向同比例缩放。
(1) 代码实现
setAutoSizeTextTypeWithDefaults(@AutoSizeTextTypeintautoSizeTextType)
参数值:
AUTO_SIZE_TEXT_TYPE_NONE 关闭自动调整大小功能
AUTO_SIZE_TEXT_TYPE_UNIFORM 水平和垂直方向按同比例缩放
注意:默认的文字最小尺寸是12sp,最大尺寸是112sp,尺寸粒度 1px
使用支持库时的代码实现:
TextViewCompat.setAutoSizeTextTypeWithDefaults(TextViewtextview,int autoSizeTextType)
autoSizeTextType的值:
TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE
TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
(2) XML文件中定义属性
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoSizeTextType="uniform"
/>
使用支持库时在XML文件中定义属性:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:autoSizeTextType="uniform"
/>
/>
2 Granularity
间隔尺寸方式可以定义文字的最大和最小尺寸,及每次尺寸改变的单位大小
(1) 代码实现
setAutoSizeTextTypeUniformWithConfiguration(intautoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, intunit)
autoSizeStepGranularity:每次缩放的最小数值
unit:尺寸单位
使用支持库时的代码实现:
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(intautoSizeMinTextSize,intautoSizeMaxTextSize, intautoSizeStepGranularity, int unit)
(2) XML文件中定义属性
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoSizeTextType="uniform"
android:autoSizeMinTextSize="12sp"
android:autoSizeMaxTextSize="100sp"
android:autoSizeStepGranularity="2sp"
/>
使用支持库时在XML文件中定义属性:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:autoSizeTextType="uniform"
app:autoSizeMinTextSize="12sp"
app:autoSizeMaxTextSize="100sp"
app:autoSizeStepGranularity="2sp"
/>
</LinearLayout>
3 Preset Sizes
预设尺寸允许开发人员预先设定文字尺寸缩放时的所有值,文字的尺寸只会是设置值中的一个。
(1) 代码实现
setAutoSizeTextTypeUniformWithPresetSizes(int[]presetSizes, int unit)
presetSizes:包含设置的一系列文字尺寸
使用支持库时的代码实现:
TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextViewtextView,int[] presetSizes, int unit)
(2) XML文件中定义属性
//定义文字的尺寸
<resources>
<array
name="autosize_text_sizes">
<item>10sp</item>
<item>12sp</item>
<item>20sp</item>
<item>40sp</item>
<item>100sp</item>
</array>
</resources>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoSizeTextType="uniform"
android:autoSizePresetSizes="@array/autosize_text_sizes"
/>
使用支持库时在XML文件中定义属性:
<resources>
<array
name="autosize_text_sizes">
<item>10sp</item>
<item>12sp</item>
<item>20sp</item>
<item>40sp</item>
<item>100sp</item>
</array>
</resources>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:autoSizeTextType="uniform"
app:autoSizePresetSizes="@array/autosize_text_sizes"
/>
</LinearLayout>
---------------------
原文:https://blog.csdn.net/xjbclz/article/details/73928987