从0开始认识android(十九):8.0字体大小自适应的Autosizing TextViews

  8.0开始,在不同尺寸的屏幕上,TextView可以设置autoSizeTextType属性使文字大小填满整个TextView控件。例如下面的一个TextView:

<TextView
        android:id="@+id/myview"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:text="测试文本"
        android:autoSizeTextType="uniform"
        android:background="@drawable/shape_rec_stroke"
    />

  TextView的宽度是填满屏幕的,而高度则限定在60dp,最终在8.0的设备上显示的是如下效果:
  这里写图片描述
  而在7.0设备上显示的如下:
  这里写图片描述
  黄色框框即TextView的大小,运行在8.0及更高版本设备上时会文本会自动伸缩到整个控件的大小。这时我们会问,难道我们的控件高度设为200dp,文本也会撑到这么大吗?!其实不是的,如果你只指定了autoSizeTextType一个属性,那么文本大小是有一个默认最小值、默认最大值和一个默认梯度值的:默认最小为12sp,默认最大为112sp,默认梯度为1sp。所以,当控件只指定了autoSizeTextType一个属性时,哪怕我们的控件再大,文本大小最大只会大到112sp。
  除了在布局文件中定义这个属性外,我们也可以通过代码实现这个功能:
  

//minSdkVersion小于26
        TextViewCompat.setAutoSizeTextTypeWithDefaults(mMyview,TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);
        //minSdkVersion为26以上
//        mMyview.setAutoSizeTextTypeWithDefaults(TextView.AUTO_SIZE_TEXT_TYPE_UNIFORM);

  其中的mMyview即我们的目标TextView。

  注意:使用autoSizeTextType功能的控件,其高度和宽度最好不要wrap_content,这会引起一些不可预知的结果。
  那我们可以更改最大最小值和梯度值么?这是完全可以的,我们先来看看字体大小自适应的其他两种实现方式:
  1、指定最大、最小和梯度值
  布局文件中实现:
  

<TextView
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:autoSizeTextType="uniform"
    android:autoSizeMinTextSize="12sp"
    android:autoSizeMaxTextSize="100sp"
    android:autoSizeStepGranularity="2sp" />

  代码实现:

TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(mMyview,
                12,100,2, TypedValue.COMPLEX_UNIT_SP);
        //minSdkVersion为26以上
//        mMyview.setAutoSizeTextTypeUniformWithConfiguration(12,100,2,TypedValue.COMPLEX_UNIT_SP);

  2、预设一组值,不自动递增
  首先在res/values/arrays.xml文件中预设一组值: 

<resources>
  <array name="autosize_text_sizes">
    <item>10sp</item>
    <item>12sp</item>
    <item>20sp</item>
    <item>40sp</item>
    <item>100sp</item>
  </array>
</resources>

  布局文件中实现:
  

<?xml version="1.0" encoding="utf-8"?>
<TextView
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:autoSizeTextType="uniform"
    android:autoSizePresetSizes="@array/autosize_text_sizes" />

  代码中实现: 

//minSdkVersion小于26
        TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(mMyview,
                new int[]{10,12,20,40,100}, TypedValue.COMPLEX_UNIT_SP);
        //minSdkVersion为26以上
//        mMyview.setAutoSizeTextTypeUniformWithPresetSizes(new int[]{10,12,20,40,100}, 
//                TypedValue.COMPLEX_UNIT_SP);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值