linearlayout是线性布局,线性肯定是具有横竖两种方向的,水平和垂直。需要注意的是android:orientation="vertical",子View使用layout_gravity在垂直方向上的设定无效;android:orientation="horizontal",子View使用layout_gravity在水平方向上的设定无效。
在 LinearLayout 中有垂直/水平两个方向的布局,任一方向的布局思想都是相同的,所以我们只需要具体分析其中一个方向即可,另一个方向可以类比,在View 和 ViewGroup 中的布局有三大流程,分别是 onMeasure、onLayout 和 onDraw,在 LinearLayout 中 onLayout 和 onDraw 两个流程基本都是模板化的写法,而且 LinearLayout 布局简单,无论是垂直方向还是水平方向都是依次排列每个 childView 的,分析起来并不复杂,大家可以自行分析。但是 onMeasure 流程就比较复杂,分为两种情况:不使用 layout_weight 属性,每个 childView 按照自身的情况计算本身的大小即可。使用 layout_weight 属性,需要根据 LinearLayout 的剩余空间和 layout_weight 的比例,计算每个 childView 的大小。