对于 android 屏幕适配大家可能比较头疼,因为android 设备碎片化太严重。
大家可能使用过的适配方案有:
- 百分比布局。
- 针对不同分辨率或最小宽度生成不同dimens.xml。
- 鸿神的AutoLayout动态换算等适配方案。
但是这些方案或多或少都有些问题,所以自己写了一种适配方案,感觉效果不错,在系统版本为8.1的设备上也测试通过,就拿出来分享了。
接下来先给大家展示下在适配前后的效果对比(为了效果明显直接拿 pad 和手机进行对比):
适配前
适配后
看到效果后是不是对本方案产生了兴趣?做到这种程度的适配也只是:
1.在你的Application中加一行配置:
ScreenUtil.adaptDensity(this, 375, 667, true, ScreenUtil.MODE_FORCE_ADAPT_LONG_SIDE);
2.然后在你的BaseActivity中加入:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Logger.d(TAG, "onConfigurationChanged");
ScreenUtil.updateConfig(this, getResources());
}
第一步中,参数依次是:
-
Application 实例。
-
设计稿短边尺寸 单位是 dp。(单位是其他的换成 dp)
-
设计稿长边尺寸 单位同上。
-
是否把字体大小设置为系统默认。(忽略用户在系统设置里面的字体大小设置)。
-
适配模式3种。(依照自己项目选择)
-
MODE_ADAPT_TWO_SIDE 适配兼顾宽高;
-
MODE_FORCE_ADAPT_SHORT_SIDE 强制适配短边;
-
MODE_FORCE_ADAPT_LONG_SIDE 强制适配长边;
使用须知:
- 此方案基于screen density实现,项目里布局要使用 dp 和 sp。(dp、sp 是 android 上最佳尺寸单位!)
- 若是已完工的项目有适配需求,布局使用的单位却不是 dp、sp,需要先全局修改,可以 写脚本使用正则方式替换。
- 此方案只适用于minSdkVersion>=17的应用。
- 注意没有完美适配这一说,因为手机屏幕比例不尽相同,有16:9、16:10、18:9、18.5:9等。
- 方案中提到的【长边】及【短边】是为了兼容横竖屏应用的说法。
- 不能保证完全没有兼容性问题,遇到请反馈给我。
- 此适配是缩放的方式,若要对pad屏幕充分利用,还需要单独设计布局。
ScreenUtil.kt 这个文件下载地址,是kotlin代码,还没接触过kotlin的赶快去学习吧!下篇博文会讲解下实现原理。