LinearLayout,其实就是线性布局,结构层次相对来说简单非常明了,只有横和竖2条直线的方向。这里主要记录下LinearLayout的重要属性,以及使用时需要注意的事项。
android:orientation="vertical"//垂直排列
android:orientation="horizontal"//水平排列
控制LinearLayout的子控件内部具体的排列顺序,还需要使用android:layout_gravity这个属性。
可是当orientation为vertical时,子控件设置android:layout_gravity="center_vertical"或者自身设置android:gravity="center_vertical"是无效的。
同样当orientation为horizontal时,子控件设置android:layout_gravity="center_horizontal"或者自身设置android:gravity="center_horizontal"是无效的。
从上面可以得知:在父控件中android:gravity属性和其子控件的android:layout_gravity效果是一样的。
既然上面提到了gravity,下面就对它的选项(可以多选)进行下解释:
center:居中 center_horizontal:水平居中 center_vertical:垂直居中
left:偏左 |right:偏右 (start和end:详见 这里有这2个属性的解释)
bottom:偏下 |top:偏上
下面的一些没怎么用过:
fill:充满容器 |fill_horizontal:水平方向充满容器 |fill_vertical:垂直方向充满容器
clip_horizontal:水平裁剪|clip_vertical:垂直裁剪
既然是设置分割线,首先我们就需要有分割线:
android:divider="@drawable/drawable"//分割线的drwable,不能直接给color(无效)
android:dividerPadding="0.5dp"//分割线高度或者宽度
分割线的Shape.xml:
选择的样式(可以多选):
LinearLayout.SHOW_DIVIDER_BEGINNING;//开始的分割线
LinearLayout.SHOW_DIVIDER_MIDDLE;//中间的分割线
LinearLayout.SHOW_DIVIDER_END;//结束的分割线
LinearLayout.SHOW_DIVIDER_NONE;//没有分割线
用一个View将高度或宽度设置为match_parent,另一个长度设置为0.5dp,设置一个background
来达到分割线的效果:
android:layout_height="0.5dp"
android:background="@color/colorPrimary"/>
在开发中,用的这种方式,可是个人觉得上面这个方式,代码比较简约.
上图中2个布局其实都差不多,唯一的区别就是:第二个布局的android:baselineAligned="false";
不难发现有基线的情况下,文字默认都在一条直线上,这样我们有时候就会有布局的麻烦,解决方法当然就是设置基线为false;
同时,我们可以利用基线来布局如布局二的样式,是不是感觉很常见的一个底部菜单栏样式?
图一的布局:
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_weight="1"
android:background="@color/colorPrimary"/>
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_weight="2"
android:background="@color/colorAccent"/>
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_weight="2"
android:background="@color/colorPrimaryDark"/>
图二的布局:
仅仅只是将TextView的android:layout_width="match_parent";
在图片可以看出,wrap_content情况下, tv1:tv2:tv3=1:2:2;刚好是权重的比值。
符合大家所说的权重比值,权重越多比例越大。
可是在match_parent的情况下,tv1:tv2:tv3=3:1:1,这样明显不是我们想要的结果。
那么权重到底是怎么计算的呢?
图二 tv1的宽度:match_parent,我们这里用L表示。
那么tv2和tv3的宽度也是L。
这时候剩余的长度呢?当然是总长度减去3个控件的长度,即:L-3L=-2L。
然后将这个剩余长度再来分配:
tv1的宽度=L-(1/5)2L=(3/5)L;
tv2和tv3的宽度=L-(2/5)2L=(1/5)L;
LinearLayoutDemo