转载请标明出处:http://www.jianshu.com/p/ea53896979f2
本文出自:Jlanglang
前言
个人用hongyang的Autolayout用了有挺长一段时间了,git上这个项目也停止更新了,只能自己想办法了.
个人觉得autolayout有这几个缺点:
1.必须使用px;
2.会产生大量的AutoLayoutParams类;
3.很多控件需要继承扩展,才能有效果.
4.适配的宽高参考值需要通过xml配置
5.必须使用AutoActivity,Auto布局容器
Autolayout传送门
基于该例子修改:
AutoLayout——Android屏幕自动适配
屏幕]适配的几种方式
1.百分比布局(这个挺好的,就是有小bug,不知道官方修复没)
2.dimens适配,比较保险,常见的适配方式(但是会造成apk增大,依然不能适配所有)
3.动态计算,也就是autolayout这种.
-------------------------------------分割线----------------------------------------------
进入正题:
Paste_Image.png你没看错,相对与Autolayout而言,AutoUtils现在两个类.
原理其实挺简单的,计算比率,然后计算px.修改layoutparams的值
-------------------------------------分割线----------------------------------------------
AutoOptions:
这个类,类型于Imageloader的DisplayImageOptions,
作用是配置,
AutoOptions builder = new AutoOptions.Builder()
.init(this)//需要一个context
.setAutoType(AutoOptions.AutoType.DP_2)//设置Type,布局写的px还是dp.根据该type进行计算
.setHasStatusBar(true)//是否将StatusBar计算进去
.setDesign(720, 1280)//根据什么样的分辨率写的布局.(就是ui切的图是什么尺寸的)
.build();
//设置AutoOptions
AutoUtils.setAutoOptions(builder);
AutoUtils
//对,就是这么简单.将Acitivity传进去
AutoUtils.auto(this);
其他的一些方法
//直接传Acitivity,会计算padding和margin值
public static void auto(Activity act) ;
//会计算padding和margin值
public static void auto(View view);
//不会计算padding和margin值
public static void autoSize(View view);
//文字大小
public static void autoTextSize(View view);
//传入Width,得到Auto后的width值
public static int getDisplayWidthValue(int designWidthValue)
//传入Height,得到Auto后的Height值
public static int getDisplayHeightValue(int designHeightValue)
具体使用(建议):
public class BaseApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
AutoOptions builder = new AutoOptions.Builder()
.init(this)
.setAutoType(AutoOptions.AutoType.DP_2)
.setHasStatusBar(true)
.setDesign(720, 1280)
.build();
//设置AutoOptions
AutoUtils.setAutoOptions(builder);
}
}
public abstract class BaseActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
AutoUtils.auto(this);
}
}
如果不想使用默认的AutoOptions.
每个方法都支持传入AutoOptions进行计算,也可以直接setAutoOptions(),进行全局修改.
-------------------------------------------分割线---------------------------------------------
目前的缺点:
1.无法判别view是否已经auto计算,可能重复auto,需要注意
2.对于某些控件(如tablayout中的tab)无效.需要另写工具类进行适配
详细代码:
您的喜欢与建议是我最大的动力-_-
网友评论