Android O新特性之Autosizing TextViews(随着TextView宽高而自动改变文字大小)

来源:互联网 发布:微电影后期软件 编辑:程序博客网 时间:2024/06/05 20:45

    Android O已经推出了,想要去研究的童鞋可以看看这个:https://developer.android.google.cn/preview/index.html

   这篇文章主要介绍一下新特性之Autosizing TextViews

   正如标题所言,根据布局大小来动态改变文字大小

   分为三种情况:

  • Default 默认
  • Granularity 粒度
  • Preset Sizes 预设尺寸
    先写一个布局如下:
 
<TextView        android:gravity="center"        android:textColor="#F00"        android:layout_width="match_parent"        android:layout_height="200dp"        android:text="test"        />

   
   Default 默认:
   参数android:autoSizeTextType,可选择uniform或none
   none的效果和上图一样,而uniform则为
 

  Granularity 粒度:
 不仅要设置android:autoSizeTextType,还要设置以下参数:
android:autoSizeMinTextSize="20px"//最小文字大小android:autoSizeMaxTextSize="30px"//最大文字大小android:autoSizeStepGranularity="2sp"//每次文字大小变化的数值
  而Default则是这些参数都为默认,即minTextSize = 12sp, maxTextSize = 112sp以及 granularity = 1px.
  Preset Sizes 预设尺寸
 res/values/建立一个arrays.xml,在其中定义:
  
<?xml version="1.0" encoding="utf-8"?><resources>    <array name="autosize">        <item>10sp</item>        <item>12sp</item>        <item>18sp</item>        <item>30sp</item>        <item>50sp</item>        <item>100</item>    </array></resources>
 
  然后在布局中引用:
 
<TextView        android:gravity="center"        android:textColor="#F00"        android:layout_width="match_parent"        android:layout_height="200dp"        android:text="test"        android:autoSizeTextType="uniform"        android:autoSizePresetSizes="@arrays/autosize"        />

  这时,当TextView自动调整文本大小时,则会使用你定义的数组。
  


   而上面三种操作用代码实现如下(我用的kotlin,如有未用过kotlin的,请移步至http://blog.csdn.net/u013279866/article/details/72473279):
   
 //Default        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {            tv.setAutoSizeTextTypeWithDefaults(AUTO_SIZE_TEXT_TYPE_UNIFORM)        }        //Granularity        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {            tv.setAutoSizeTextTypeUniformWithConfiguration(12,122,2,COMPLEX_UNIT_SP)        }        //Preset Sizes        var ints:ArrayList<Int> = ArrayList()        ints.add(10)        ints.add(12)        ints.add(18)        ints.add(30)        ints.add(50)        ints.add(100)        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {            tv.setAutoSizeTextTypeUniformWithPresetSizes(ints.toArray() as IntArray,COMPLEX_UNIT_SP)        }



阅读全文
0 0