昨天测试给反馈了一个问题,是一个dialogFragment里面的textview显示不全。问题一提出来,我的第一反应肯定是屏幕适配的问题,于是就找了几个机型都是试了一下并没发现问题所在,后来仔细一看测试给发过来的图片发现里面的文字非常大,感觉有点不对劲,肯定是用户自己调了系统的文字大小导致的,最终经过测试验证是这个问题造成的。 知道了问题所在就好办了,剩下的就是寻找解决方案了,自己去尝试了一下把系统文字调到最大,看了一些大型app如何,而支付宝、美团等等这些app的字体都没有改变。这下就有了思路,找到相对应的api去禁止跟随系统文字大小而改变不就解决问题了吗。经过查百度有很多方法都是无效的,下面就例举几个无效的例子,以防大家以后遇到这个问题踩坑。
无效案例(一)
//在Application中重写getResources()
@Override
public Resources getResources() {
Resources resources = super.getResources();
if (resources != null && resources.getConfiguration().fontScale != 1.0f) {
Configuration configuration = resources.getConfiguration();
configuration.fontScale = 1.0f;
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
}
return resources;
}
无效案例(二)
//在BaseActivity中重写getResources()
@Override
public Resources getResources() {
Resources resources = super.getResources();
Configuration configuration = new Configuration();
configuration.setToDefaults();
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
return resources;
}
还有类似上面很多的例子,就不一一例举了,都是无效的。
下面说一下我寻找到的有效的方法,,就是使用AutoSize,非常简单并且有效。代码如下:
//依赖
api 'me.jessyan:autosize:1.1.2'
//在Application中的onCreate()方法里加入以下代码
AutoSizeConfig.getInstance().setExcludeFontScale(true);
至此就可以解决掉此问题。
这是setExcludeFontScale()方法的解释
/**
* 是否屏蔽系统字体大小对 AndroidAutoSize 的影响, 如果为 {@code true}, App 内的字体的大小将不会跟随系统设置中字体大小的改变
* 如果为 {@code false}, 则会跟随系统设置中字体大小的改变, 默认为 {@code false}
*
* @param excludeFontScale 是否屏蔽
*/
public AutoSizeConfig setExcludeFontScale(boolean excludeFontScale) {
isExcludeFontScale = excludeFontScale;
return this;
}
此篇文章希望能帮助到大家,让更多的人少踩坑
网友评论