关于网上解决Android4.x系统设置字体大小导致应用布局混乱引起的问题
2016-07-27 17:21
771 查看
从Android4.0系统以后,提供了设置“字体大小”来改变系统字体的选项。当然,这对于老人机的厂商来说也算是个福音,只不过对于开发者来说,就略有些坑了。因为从如果用户设置了放大或者缩小字号的时候,如果字体或者有些地方用了sp做单位,布局就会乱了。
网上一搜,还是有很多解决方案的。普遍的做法是在Acitivty基类里面重写getResources()方法,如下:
这种做法确实能起到作用。不过经多次测试发现,在界面渲染时会一直调用getResources(),从而拉低app的性能,元素太多的界面切换、操作都会出现卡顿的现象。
目前也没找到太好的解决方案,现在想到的解决方案有两个:
1、项目全部采用dp单位,就可以在不重写getResources()的前提下,即使设置了系统字号也不会搞乱布局。
2、在需要适应切换字号的界面,才重写getResources()。
按照方法2,可以对getResources()做稍微调整。
这样,在不需要适应字号的界面,只要重写一下neeCustomResources(),返回false就OK了。
这两个都是折中的方法,如果有其他方案的,期待分享!
网上一搜,还是有很多解决方案的。普遍的做法是在Acitivty基类里面重写getResources()方法,如下:
@Override public Resources getResources() { Resources res = super.getResources(); Configuration config = new Configuration(); config.setToDefaults(); res.updateConfiguration(config, res.getDisplayMetrics()); return res; }
这种做法确实能起到作用。不过经多次测试发现,在界面渲染时会一直调用getResources(),从而拉低app的性能,元素太多的界面切换、操作都会出现卡顿的现象。
目前也没找到太好的解决方案,现在想到的解决方案有两个:
1、项目全部采用dp单位,就可以在不重写getResources()的前提下,即使设置了系统字号也不会搞乱布局。
2、在需要适应切换字号的界面,才重写getResources()。
按照方法2,可以对getResources()做稍微调整。
private boolean needCustomResources(){ return true; } @Override public Resources getResources() { Resources res = super.getResources(); if(needCustomResources()){ Configuration config = new Configuration(); config.setToDefaults(); res.updateConfiguration(config, res.getDisplayMetrics()); } return res; }
这样,在不需要适应字号的界面,只要重写一下neeCustomResources(),返回false就OK了。
这两个都是折中的方法,如果有其他方案的,期待分享!
相关文章推荐
- WebSocket Android
- Android基础:三种inflate的区别
- 二、客户端开始
- 【Android】使RecyclerView 支持setEmptyView
- 给 Android 开发者的 RxJava 详解
- Android属性动画实现炫酷的登录界面
- Android Studio导入第三方类库的方法
- Android简单实现自定义流式布局的方法
- android 绘图之Path与Paint详解 - 冷冷汤圆
- android studio生成arr包或 jar包及混淆
- Android设计模式--模板方法模式
- Android.mk 文件语法详解
- 关于ViewGroup的触摸事件拦截
- 初学android-简单的图灵机器人
- Android.mk文件语法规范及使用模板
- Android路由框架设计与实现
- Android选择器
- Android 解决方法数 65536 (65k) 限制
- Android屏幕适配问题,dip,px,dpi,ppi,sp,density,分辨率,尺寸详细解释及转换
- ProgressDialog 简单使用记录