源码阅读之TextView(2)--AutoSizeTextType

导读:源码阅读系列链接:源码阅读之TextView(1)

本文TextView基于android-28版本,代码行数12551.
前期回顾:上篇文章阅读了关于XMLTypefaceAttr的相关逻辑
本篇:主要关于自定义注解AutoSizeTextType

► 结构

image.png

► 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中,此文暂不详解。

你可能感兴趣的:(源码阅读之TextView(2)--AutoSizeTextType)