开发中有很多场景需要进行自适应适配,但是关于这种字体自适应,我也是为数不多的几回运用,同时也简略剖析了下源码,期望咱们都有收成
很多时候控件的宽度是有限的,而要完成比较美观的UI效果,常见的处理方式应该有以下几种
- 默许执行多行显现
- 单行显现,缺乏部分显现…
- 自适应字体
静态设置
宽度是有限的,内部文字会依据装备进行自适应
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="自适应字体" />
源码:自定义特点
动态设置
// 设置自适应文本默许装备(根底装备)
TextViewCompat.setAutoSizeTextTypeWithDefaults(textView, TextView.AUTO_SIZE_TEXT_TYPE_UNIFORM)
// 主动设置自适应字体相关装备
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(textView, 20, 48, 2, TypedValue.COMPLEX_UNIT_SP)
源码剖析
假如你有时间,也有这方面的个人兴趣,能够一同分享学习一下
setAutoSizeTextTypeWithDefaults
依据源码来看的话,内部做了兼容处理,首要是设置自适应文本的默许装备
默许装备办法首要依据不同类型设置自适应相关装备,默许有AUTO_SIZE_TEXT_TYPE_NONE
or AUTO_SIZE_TEXT_TYPE_UNIFORM
,假如没有设置的话就会报 IllegalArgumentException
反常
- AUTO_SIZE_TEXT_TYPE_NONE 铲除自适应装备
- AUTO_SIZE_TEXT_TYPE_UNIFORM 增加一些默许的装备信息
setAutoSizeTextTypeUniformWithConfiguration
依据源码来看主传4个参数,内部也做了兼容处理,注明 Build.VERSION.SDK_INT>= 27
or 归于 AutoSizeableTextView
才能运用文字自定义适配
- textView 需进行自适应的控件
- autoSizeMinTextSize 自适应自小尺度
- autoSizeMaxTextSize 自适应自负尺度
- autoSizeStepGranularity 自适应装备
- unit 单位,如 sp(字体常用)、px、dp
unit 有一些常见的到单位,例如 dp、px、sp等