Android杂识Android实用技术Android知识

Android简单易懂的屏幕适配AutoUtils(低侵入)

2017-07-24  本文已影响435人  Jlanglang

转载请标明出处: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)无效.需要另写工具类进行适配

详细代码:

附上Github地址


您的喜欢与建议是我最大的动力-_-

上一篇下一篇

猜你喜欢

热点阅读