导读:源码阅读系列链接:源码阅读之TextView(1)
本文TextView基于android-28版本,代码行数12551.
前期回顾:上篇文章阅读了关于XMLTypefaceAttr的相关逻辑
本篇:主要关于自定义注解AutoSizeTextType
► 结构
► AutoSizeTextType
- TextView支持AutoSize是从SDKVersion 26,AutoSize的作用是让通过改变文字大小使其尽可能填充布局。
- 对应xml中TextVIew的属性是autoSizeTextType。
/** @hide */
@IntDef(prefix = { "AUTO_SIZE_TEXT_TYPE_" }, value = {
AUTO_SIZE_TEXT_TYPE_NONE,
AUTO_SIZE_TEXT_TYPE_UNIFORM
})
@Retention(RetentionPolicy.SOURCE)
public @interface AutoSizeTextType {}
// Default minimum size for auto-sizing text in scaled pixels.
private static final int DEFAULT_AUTO_SIZE_MIN_TEXT_SIZE_IN_SP = 12;
// Default maximum size for auto-sizing text in scaled pixels.
private static final int DEFAULT_AUTO_SIZE_MAX_TEXT_SIZE_IN_SP = 112;
// Default value for the step size in pixels.
private static final int DEFAULT_AUTO_SIZE_GRANULARITY_IN_PX = 1;
// Use this to specify that any of the auto-size configuration int values have not been set.
private static final float UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE = -1f;
// Auto-size text type.
private int mAutoSizeTextType = AUTO_SIZE_TEXT_TYPE_NONE;
- 使用@IntDef注解定义了两个前缀为“"AUTO_SIZE_TEXT_TYPE_”的值,此处也对应xml中autoSizeTextType的两个值
- RetentionPolicy.SOURCE 在源文件中有效,编译过程中会被忽略
- 定义了自缩放字体的默认最大sp值和默认最小sp值,以及默认缩放间隔。
► AutoSizeTextType的使用
①加在变量前,限制变量范围
public void setAutoSizeTextTypeWithDefaults(@AutoSizeTextType int autoSizeTextType) {
if (supportsAutoSizeText()) {
switch (autoSizeTextType) {
case AUTO_SIZE_TEXT_TYPE_NONE:
clearAutoSizeConfiguration();
break;
case AUTO_SIZE_TEXT_TYPE_UNIFORM:
..
②加在方法前,限制方法返回值范围
@AutoSizeTextType
public int getAutoSizeTextType() {
return mAutoSizeTextType;
}
关于AutoSizeTextType的使用逻辑大部分都在TextViewCompat中,此文暂不详解。