欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一种侵入性极低的android全机型适配方案 (使用篇)

程序员文章站 2022-05-31 18:45:59
...

对于 android 屏幕适配大家可能比较头疼,因为android 设备碎片化太严重。

大家可能使用过的适配方案有:
1. 百分比布局。
2. 针对不同分辨率或最小宽度生成不同dimens.xml。
3. 鸿神的AutoLayout动态换算等适配方案。

但是这些方案或多或少都有些问题,所以自己写了一种适配方案,感觉效果不错,在系统版本为8.1的设备上也测试通过,就拿出来分享了。

接下来先给大家展示下在适配前后的效果对比(为了效果明显直接拿 pad 和手机进行对比):

适配前
一种侵入性极低的android全机型适配方案 (使用篇)

适配后
一种侵入性极低的android全机型适配方案 (使用篇)

看到效果后是不是对本方案产生了兴趣?做到这种程度的适配也只是:
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());
    }

第一步中,参数依次是:
1. Application 实例。
2. 设计稿短边尺寸 单位是 dp。(单位是其他的换成 dp)
3. 设计稿长边尺寸 单位同上。
4. 是否把字体大小设置为系统默认。(忽略用户在系统设置里面的字体大小设置)。
5. 适配模式3种。(依照自己项目选择)

  1. MODE_ADAPT_TWO_SIDE 适配兼顾宽高;
  2. MODE_FORCE_ADAPT_SHORT_SIDE 强制适配短边;
  3. 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等。
- 获取系统元素宽高可能有变化,可参考ScreenUtil 中获取状态栏高度 getStatusHeight(),在适配前获取并保存值。
- 方案中提到的【长边】及【短边】是为了兼容横竖屏应用的说法。
- 不能保证完全没有兼容性问题,遇到请反馈给我。(将 pad 应用移植到手机上我遇到了1.弹窗样式Activity显示不全、Dialog 不居中或显示不全的问题,但对项目代码简单修改也正常了。)
- 此适配是缩放的方式,若要对pad屏幕充分利用,还需要单独设计布局。

ScreenUtil.kt 这个文件下载地址,是kotlin代码,还没接触过kotlin的赶快去学习吧!下篇博文会讲解下实现原理。

相关标签: android 适配