LinearLayout源码解析

来源:互联网 发布:乌鲁木齐网络问政 编辑:程序博客网 时间:2024/06/13 21:16

LinearLayout源码解析

1.LinearLayout中最重要的部分:orientation Measure weight

2.orientation:分为Horizontal vertical 两种方向的原理是类似的,所以这里只分析vertical垂直方向

measure

1.定义一些列的参数

2.循环LinearLayout中的子view,并且测量他们的高度,当子view设置了weight属性,就给个标记,并且跳过该view的高度的测量

3.对于设置了weight属性的view进行测量,此时分两种情况,子控件的高度是否为0,父控件的测量模式是否为Exactly

weight

1.测量的结果是由父控件的测量模式和子控件的LayoutParams共同决定的

2.当父view的测量模式为Exactly时,如果,子view设置了weight,并且height==0,此时,测量的结果和我们分配的weight是一致的;

3.当父View的测量模式为Exactly时,如果,子view设置了weight,并且height设置为match_parent或者具体的数值时,测量的结果跟我们分配的weight是相反的;

4.当父View的测量模式为At_Most时,如果子View设置了weight,那么子View的高度会被强行设置为wrap_content,然后按照wrap_content模式进行测量

5.当父view的测量模式为At_Most时,如果子View没有设置weight,那么子View的高度跟其他viewGroup一致

参数解释

1.父类的测量模式:

EXACTLY——一般是设置了具体的值或者match_parent
当前尺寸就是当前View应该取的尺寸

AT_MOST—-wrap_content
当前尺寸是当前View能取的最大尺寸

UNSPECIFIED(不常用)
父容器没有对当前View有任何限制,当前View可以任意取尺寸

2.子类的布局参数:LayoutParams(layoutParams.weight)

原创粉丝点击