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">

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

    "@+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)

你可能感兴趣的:(布局优化,布局)