10. LinearLayout RelativeLayout

作者: 真胖大海 | 来源:发表于2018-03-29 10:42 被阅读20次

    demo

    • LinearLayout 子View测量一次,但是实现复杂的布局要使用嵌套
    • elativeLayout 子View测量两次,但是实现复杂的布局不用嵌套
    • ConstraintLayout既能减少布局嵌套又不会测量两次
      RelativeLayout.onmeasure方法中会对子控件测量两次,源码如下
     @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         for (int i = 0; i < count; i++) {
                View child = views[i];
                    measureChildHorizontal(child, params, myWidth, myHeight);
                }
            }
            
              for (int i = 0; i < count; i++) {
                final View child = views[i];
                measureChild(child, params, myWidth, myHeight);
              }
        }
    

    注意

    1. 有一个细节一个View至少会被测量两次
      如下面一个布局文件
      根布局文件1
      LinearLayout被测量2次,View被测量2次
    <LinearLayout>
       <View/>
    </LinearLayout>
    

    如下的布局文件
    RelativeLayout被测量2次,因为View会被RelativeLayout测量两次,所以View被测量4次

    <RelativeLayout>
       <View/>
    </RelativeLayout>
    
    1. 对于垂直方向的LinearLayout,如果其layout_height="wrap_cont",而其子View的layout_width="match_parent",则子View会被测量两次。(水平方向的LinearLayout同理)
    <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
        </LinearLayout>
    

    相关文章

      网友评论

        本文标题:10. LinearLayout RelativeLayout

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