目前流行的ui适配 看大佬们都在用今日头条适配方案跟SW限定符适配方案。
为什么现在没有人用AndroidAutoLayout呢?
看大佬们说AndroidAutoLayout设计有问题。 什么问题?请看下面这个链接
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);
}
}
}
今日头条屏幕适配方案 和 SmallestWidth 屏幕适配方案 也没有达到百分百适配,他们也是以宽或者高中的一个作为基准进行屏幕适配的。