开发中有很多场景需要进行自适应适配,但是关于这种字体自适应,我也是为数不多的几回运用,同时也简略剖析了下源码,期望咱们都有收成

很多时候控件的宽度是有限的,而要完成比较美观的UI效果,常见的处理方式应该有以下几种

  • 默许执行多行显现
  • 单行显现,缺乏部分显现…
  • 自适应字体

静态设置

宽度是有限的,内部文字会依据装备进行自适应

Android进阶之路 - 字体自适应

TextView 自身提供了自适应的相关装备,可直接在layout中进行设置

首要特点

  • maxLines="1"
  • autoSizeMaxTextSize
  • autoSizeMinTextSize
  • autoSizeTextType
  • autoSizeStepGranularity
    <TextView
        android:id="@+id/tv_text3"
        android:layout_width="50dp"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:autoSizeMaxTextSize="18sp"
        android:autoSizeMinTextSize="10sp"
        android:autoSizeStepGranularity="1sp"
        android:autoSizeTextType="uniform"
        android:gravity="center"
        android:maxLines="1"
        android:text="自适应字体" />

源码:自定义特点

Android进阶之路 - 字体自适应


动态设置

 // 设置自适应文本默许装备(根底装备)
 TextViewCompat.setAutoSizeTextTypeWithDefaults(textView, TextView.AUTO_SIZE_TEXT_TYPE_UNIFORM)
 // 主动设置自适应字体相关装备
 TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(textView, 20, 48, 2, TypedValue.COMPLEX_UNIT_SP)

源码剖析

假如你有时间,也有这方面的个人兴趣,能够一同分享学习一下

setAutoSizeTextTypeWithDefaults

依据源码来看的话,内部做了兼容处理,首要是设置自适应文本的默许装备

Android进阶之路 - 字体自适应

默许装备办法首要依据不同类型设置自适应相关装备,默许有AUTO_SIZE_TEXT_TYPE_NONE or AUTO_SIZE_TEXT_TYPE_UNIFORM ,假如没有设置的话就会报 IllegalArgumentException 反常

  • AUTO_SIZE_TEXT_TYPE_NONE 铲除自适应装备
  • AUTO_SIZE_TEXT_TYPE_UNIFORM 增加一些默许的装备信息

Android进阶之路 - 字体自适应


setAutoSizeTextTypeUniformWithConfiguration

依据源码来看主传4个参数,内部也做了兼容处理,注明 Build.VERSION.SDK_INT>= 27 or 归于 AutoSizeableTextView 才能运用文字自定义适配

  • textView 需进行自适应的控件
  • autoSizeMinTextSize 自适应自小尺度
  • autoSizeMaxTextSize 自适应自负尺度
  • autoSizeStepGranularity 自适应装备
  • unit 单位,如 sp(字体常用)、px、dp

Android进阶之路 - 字体自适应

unit 有一些常见的到单位,例如 dp、px、sp等

Android进阶之路 - 字体自适应