美文网首页Framework
Android UI疑难杂症(一)

Android UI疑难杂症(一)

作者: 在岁月中远行 | 来源:发表于2022-08-02 00:38 被阅读0次

    问题:RelativeLayout中最底的View其layout_marginBottom无效

    我们先看一个现象:

    RelativeLayout 最下面是一个Button,设置了属性android:layout_marginBottom="118dp",在安卓API16的手机上运行效果这个属性是失效的。

    而在安卓API22确实正常的(其实API19以上都是生效的) ,下面我们来分析原因

    我们可以从android fraework源码里寻找答案:

    在RelativeLayout的onMeasure中有这么一段代码:

    当RelativeLayout高度是android:layout_height="wrap_content"时候,并且SDk版本小于API19时候,计算高度时候并没有把此View的bottomMargin计算进去。

    height = Math.max(height, params.mBottom); 

    height取的就是最下面View的mBottom值作为height,并未计算最后一个View的margub_bottom。

    RelativeLayout的height就是不断的遍历子View,然后拿height和params.mBottom取最大值,越位于下方的View,mBottom肯定是越大的(可以参考android坐标系),就这样计算出了RelativeLayout的高度,最后调用方法

    解决办法:当我们加上一段代码 如左图所示:在RelativeLayout添加加上一个View,效果如右图所示生效了:

    原因就是RelativeLayout计算高度时候,拿最后一个View的layoutParams的mBottom作为高度,最后的View的mBottom肯定是包含android:layout_marginBottom="118dp"生效代码的,所以最后计算出RelativeLayout的height肯定是正确的。

    相关文章

      网友评论

        本文标题:Android UI疑难杂症(一)

        本文链接:https://www.haomeiwen.com/subject/vgjdwrtx.html