AutoLayout根布局适配问题

弘洋大大的UI适配库,实现了在不同设备上的自动适配,非常方便

附上链接: Android AutoLayout全新的适配方式 堪称适配终结者

遇到的问题:

在LayoutInflater.from(getContext()).inflate(resource,parent,false),根布局即parent自身的数值不被转化

关于inflate(getContext(), resource, null)和inflate(resource,parent,false)瞧下方链接
Android应用性能优化系列视图篇——LayoutInflater使用的正确姿势
先看item的根布局

<com.zhy.autolayout.AutoLinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="200px"
    android:background="@color/yellow"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/iv_ic"
        android:layout_width="20sp"
        android:layout_height="20sp"
        android:src="@mipmap/ic_launcher"
        android:visibility="gone"/>

    <TextView
        android:id="@+id/tv_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="测试数据"
        android:textSize="15sp"
        android:visibility="gone"
        />

    <com.zhy.autolayout.AutoLinearLayout
        android:layout_width="match_parent"
        android:layout_height="50px"
        android:background="#ff0000">
    </com.zhy.autolayout.AutoLinearLayout>
</com.zhy.autolayout.AutoLinearLayout>

准备了1080*1920和768*1280两个分辨率的设备,下图是不做任何处理的结果
如下图(1080*1920为左图,768*1280为右图)

  • 可以看出两个设备的红条是一样大小的,符合自动适配
  • 黄条背景两个设备高度不同,未自动适配

来看一下AutoLayout的源码,是怎么达到自动适配的效果

关键看右边两个方法,都是获取当前设备的宽/高,与设计尺寸的宽/高做对比,得到比例乘以具体数值val,如不整除,则+1
PS:这也是为什么我当初测试的时候单纯的用高的比例乘以数值来动态设置字体大小的时候,有时候会有细微的偏差
PPS:useDefault()和baseWidth()方法可看具体源码,是通过是否设置自定义属性作为基准来取宽的比例或者高的比例(某些属性如字体大小是默认取的高之比,可自己改为宽之比)

那么知道了上述源码以后,还会发现AutoUtils类里还有一个方法

看注释也知道了可以手动把view进行百分比处理

那么只要在自己的代码中手动调用就好了

1080*1920和768*1280均调用,效果如下图

这下两个分辨率不同的设备都达到了适配

结论:inflate(resource,parent,false)后,的确读取了根布局的高,但是AutoLayout真正百分比化并不是从根布局开始的,所以为了达到布局降级的目的,可采用AutoUtils.auto(view)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值