起源
由于我们公司的app,支持多国语言,所以就导致了 同样的文案,但是长度不同,就会出现适配的问题,因为 中文 是 字表义,外文是 音表义。 今天就用8.0新特新来解决这个问题。
适配前是这样的
在固定的宽高就会出现适配的问题,在之前博客中也写过解决方案
多语言适配,让text自动改变大小
但现在谷歌已经完全解决了该问题,我们就直接用谷歌的了。
适配方法
只支持最低版本是26的方法
|
|
但是现在基本最低版本都是14。 v4包提供了一些方法解决此问题,一共有三个方法
|
|
适配后
如果只想显示一行代码
代码
|
|
xml
|
|
Button上的样式 一样通用
美滋滋。
到这里只用到了一个方法就是
|
|
什么是颗粒度 预设值呢?
颗粒度Granularity
就是 当你的字体不断变大,默认是 不断让字体增加1,如果你的颗粒度设置为10,那么每次 字体变大就增加10,
比如 0,10,20,30 这样子
反过来
就是 你字体内容不断变多,显示不开的时候,没自动让字体变小,默认是不断让字体减1,如果你的颗粒度是10,那么每次字体减少10.
比如 30,20,10,0 这样子
如下动图
这里我们设置
最大字体:400
最小字体:1
颗粒度:50
单位:px
xml字体设置:300px
我们发现。输入一个字符,字体大小是251,然后不断地减少50.
那么字体为什么是251呢?
一会儿一起看源码。
预设值 PresetSizes
预设值是一个数组,字体变大变小只会在这个数组的值中进行切换,选择一个最合适的
使用方法方法
|
|
现在设置数组为
{50, 105,200,100, 219, 230, 251} 随机,也没有规律
然后不断的增加输入的内容
如下效果:
可以发现。字体变化顺序是
251,230,200,105
为什么没有显示219呢。是因为219显示不开。就跳过去了。
看源码,如何实现
这里我们通过分析
|
|
方法就能了解它的原理。
|
|
结束
到这里就结束了。希望对你们有帮助。这里卖个关子。我上面的代码完全是TextView里面的。只适合在sdk是26的时候使用。下一篇介绍一下。V4包是如何 做到兼容低版本的