10. LinearLayout RelativeLayout ConstraintLayout

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次

   

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


   

  1. 对于垂直方向的LinearLayout,如果其layout_height="wrap_cont",而其子View的layout_width="match_parent",则子View会被测量两次。(水平方向的LinearLayout同理)

        

你可能感兴趣的:(10. LinearLayout RelativeLayout ConstraintLayout)