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

前言

个人用hongyang的Autolayout用了有挺长一段时间了,git上这个项目也停止更新了,只能自己想办法了.

个人觉得autolayout有这几个缺点:

1.必须使用px; 2.会产生大量的AutoLayoutParams类; 3.很多控件需要继承扩展,才能有效果. 4.适配的宽高参考值需要通过xml配置 5.必须使用AutoActivity,Auto布局容器

Autolayout传送门 基于该例子修改: AutoLayout——Android屏幕自动适配

屏幕]适配的几种方式

1.百分比布局(这个挺好的,就是有小bug,不知道官方修复没) 2.dimens适配,比较保险,常见的适配方式(但是会造成apk增大,依然不能适配所有) 3.动态计算,也就是autolayout这种. -------------------------------------分割线----------------------------------------------

进入正题:

你没看错,相对与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地址


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值