Android 设置TextView自动调整字体大小
意为:TextView字体大小随着控件的大小变化而变化,Android 8.0(API26)新增,但兼容库 com.android.support:appcompat-v7:26.0.0
版本以上已完全兼容到 API14
有三种设置方式:
- 默认
- 粒度
- 预设大小
1.默认
允许TextView
在水平轴和垂直轴上均匀地自动调整刻度。
1.1.原生设置
xml设置
代码设置
// 参数: int autoSizeTextType
textView.setAutoSizeTextTypeWithDefaults(TextView.AUTO_SIZE_TEXT_TYPE_UNIFORM);
1.2.兼容库设置
xml设置
代码设置
// 参数: TextView textView, int autoSizeTextType
TextViewCompat.setAutoSizeTextTypeWithDefaults(textView, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);
参数介绍:
autoSizeTextType
:none: 关闭自动调整功能;uniform: 均匀缩放水平轴和垂直轴
2.粒度
允许TextView
在MinTextSize
-MaxTextSize
之间按StepGranularity
的值为增量或减量来跳动。
2.1.原生设置
xml设置
代码设置
// 参数:int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit
textView.setAutoSizeTextTypeUniformWithConfiguration(30, 50, 2, TypedValue.COMPLEX_UNIT_SP);
2.2.兼容库设置
xml设置
代码设置
// 参数:TextView textView, int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(textView, 30, 50, 2, TypedValue.COMPLEX_UNIT_SP);
参数介绍:
autoSizeMaxTextSize
:最大值
autoSizeMinTextSize
:最小值
autoSizeStepGranularity
:粒度值,即每次增量或减量的值
总结:
1.粒度xml设置时必须设置
autoSizeTextType="uniform"
,代码设置setAutoSizeTextTypeUniformWithConfiguration
时则已设置
2.默认设置其实minTextSize = 12sp、maxTextSize = 112sp、granularity = 1px的粒度设置
3.预设大小
允许TextView
设置自动调整字体大小跳动时所选的值 。
3.1.原生设置
xml设置
- 10sp
- 12sp
- 20sp
- 40sp
- 100sp
代码设置
int[] presetSizes = getResources().getIntArray(R.array.auto_size_text_sizes_code);
// 参数:int[] presetSizes, int unit
textView.setAutoSizeTextTypeUniformWithPresetSizes(presetSizes, TypedValue.COMPLEX_UNIT_SP);
- 10
- 12
- 20
- 40
- 100
3.2.兼容库设置
xml设置
代码设置
int[] presetSizes = getResources().getIntArray(R.array.auto_size_text_sizes_code);
// 参数:TextView textView, int[] presetSizes, int unit
TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(textView, presetSizes, TypedValue.COMPLEX_UNIT_SP);
参数介绍:
autoSizePresetSizes
:预设大小的数组,建议放到res/values/arrays.xml文件里
总结:
1.预设大小xml设置时可以不设置
autoSizeTextType="uniform"
,xml设置autoSizePresetSizes
和代码设置setAutoSizeTextTypeUniformWithPresetSizes
时都已判断如果autoSizePresetSizes
数组的size>0则设置autoSizeTextType="uniform"
2.默认设置其实minTextSize = 12sp、maxTextSize = 112sp、granularity = 1px的粒度设置
Demo github地址: devblog androidAutoSize
个人博客地址: devbolg