美文网首页Android UIAndroid开发经验谈
Android Oreo 8.0 新特性实战 Autosizin

Android Oreo 8.0 新特性实战 Autosizin

作者: didikee | 来源:发表于2017-11-21 16:28 被阅读388次

    Android Oreo 8.0 新特性实战 Autosizing TextView --自动缩放TextView

    8.0出来很久了,这个新特性已经用了很久了,但是一直没有亲自去试试。这几天新的需求来了,需要显示用户的金币,默认是大字体展示,但是又要求用户的金币过多(例如: 9999999 金币)时不能超出布局范围,所以需要在用户金币过多时为了将金币显示出来,需要减小字体大小。这样的需求真的和这个新特性很吻合,于是借此机会写了个简单的demo,现在分享出来,当然你也可以查看官方文档:
    https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview.html

    1. 先看看效果图

    android_8_scale_textview.gif

    如果图片不能看,可以看我的博客园
    http://www.cnblogs.com/didikee/p/7873827.html

    2. 使用条件

    新特性支持 android8.0
    当然,你也可以使用Support library,但是必须是26.0.0及其以上,我这里使用的是目前最新的 26.1.0

    implementation 'com.android.support:appcompat-v7:26.1.0'
    

    3. 三个API使用说明

    private void initScaleConfig() {
            //TODO config scale params for normal textView
            /**
             * android:autoSizeTextType="uniform"
             * the type of auto-size. Must be one of
             *        {@link TextViewCompat#AUTO_SIZE_TEXT_TYPE_NONE} or
             *        {@link TextViewCompat#AUTO_SIZE_TEXT_TYPE_UNIFORM}
             *        none: 关闭缩放功能
             *        uniform: 垂直方向与水平方向缩放
             */
            TextViewCompat.setAutoSizeTextTypeWithDefaults(tv_scale, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);
    
            /**
             * 参数一: 被设置的TextView
             * 参数二: 自动缩放的最小字号
             * 参数三: 自动缩放的最大字号
             * 参数四: 参数二与参数三所用的单位,这里因为字体大小,所以我指定为SP
             */
            TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(tv_scale,
                    12, 48, 2, TypedValue.COMPLEX_UNIT_SP);
    
            /**
             * 参数一:
             * 参数二: 设置多个预制字体大小,这样在缩放时字体会根据预制的字体大小而缩放
             * 参数三: 参数二里面的Int值对应的单位,这里因为字体大小,所以我指定为SP
             */
            int[] autoTextSize = getResources().getIntArray(R.array.autosize_text_sizes);
            TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(tv_scale, autoTextSize, TypedValue.COMPLEX_UNIT_SP);
        }
    

    具体参数说明我写在了注释上了,应该很详细了。

    结束

    完整的代码在Gist上,点击查看:
    https://gist.github.com/didikee/c846adf08c2be3c5a69e633536a60e12

    相关文章

      网友评论

      • 皮球二二:我看你是修改TextVIew宽高然后字体大小自动选择的,如果TextVIew宽高没有变化那字体大小也能变化?
        皮球二二:@didikee 好的谢谢
        didikee:@r17171709 是的,实际项目中应该是确定了显示的位置,这时候宽高是可以确定的。此时如果金额为 99,可以显示42sp字体,但是金额为999999,那么字体会自动调节到20sp左右。具体的要看你有没有配置锚点,如果你配置了锚点,那么他会优先按照你的锚点进行缩放。demo只是体现出字体是和它所在的空间相适应。空间大字体就大,空间小字体小。代码在文章末尾里,可以直接拷过去试试的。

      本文标题:Android Oreo 8.0 新特性实战 Autosizin

      本文链接:https://www.haomeiwen.com/subject/faywvxtx.html