Android 萌新UI适配-AndroidAutoLayout

904 阅读1分钟

目前流行的ui适配 看大佬们都在用今日头条适配方案跟SW限定符适配方案。

为什么现在没有人用AndroidAutoLayout呢?

github.com/hongyangAnd…

看大佬们说AndroidAutoLayout设计有问题。 什么问题?请看下面这个链接

www.jianshu.com/p/f770ef841…

AndroidAutoLayout 在任何屏幕上页面的高和宽都可以完美填充屏幕,但只要设备的屏幕高宽比和设计图的高宽比不一致(设计图的高宽比一般为 16 :9), View 就会严重变形,在 18 : 9 的设备上,正方形的 View 已经变成了长方形。

AutoLayout既然只支持16:9的手机,手机屏幕的宽高比不是 9 :16,AndroidAutoLayout 的屏幕适配就会出现问题,导致 View 严重变形。 那我可不可以帮他重新计算下宽高呢?

如果:屏幕宽高比-设计图宽高比>0 说明屏幕宽度太长了,那就给他以高作为基准进行适配 重新定义屏幕宽度 mScreenWidth = (int) (scale2 * mScreenHeight); 这种以高度作为基准进行适配,虽然在宽度无法达到百分比适配,但也相差不多

如果:屏幕宽高比-设计图宽高比<0 说明屏幕高度太高了,那就给他以宽作为基准进行适配 重新定义屏幕宽度 mScreenHeight = (int) (mScreenWidth / scale2); 这种以宽度作为基准进行适配,虽然在高无法达到百分比适配,但也相差不多

只要在AutoLayoutConifg init方法初始化宽高时候加入以下代码就可以解决只适配16:9问题

这样改完 亲测开发了N个项目适配都没啥问题 !

 public void reSetScreen() {
        double scale = (double) mScreenWidth / mScreenHeight;
        double scale2 = (double) mDesignWidth / mDesignHeight;
        BigDecimal bg2 = new BigDecimal(scale2);
        scale2 = bg2.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
        double ss = scale - scale2;
        if (Math.abs(ss) >= 0.0001) {
            if (ss > 0) {
                mScreenWidth = (int) (scale2 * mScreenHeight);
            } else {
                mScreenHeight = (int) (mScreenWidth / scale2);
            }
        }
    }

image.png

今日头条屏幕适配方案 和 SmallestWidth 屏幕适配方案 也没有达到百分百适配,他们也是以宽或者高中的一个作为基准进行屏幕适配的。