Android布局-LinearLayout属性详解

LinearLayout,其实就是线性布局,结构层次相对来说简单非常明了,只有横和竖2条直线的方向。这里主要记录下LinearLayout的重要属性,以及使用时需要注意的事项。

1.排列方式orientation



在XML布局中:

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"是无效的。

2.摆放位置gravity

从上面可以得知:在父控件中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:垂直裁剪

3.分割线showDividers



既然是设置分割线,首先我们就需要有分割线:

android:divider="@drawable/drawable"//分割线的drwable,不能直接给color(无效)

android:dividerPadding="0.5dp"//分割线高度或者宽度

分割线的Shape.xml:

注意:size必须设置,不然显示不出


选择的样式(可以多选):

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"/>

在开发中,用的这种方式,可是个人觉得上面这个方式,代码比较简约.

4.基线baselineAligned



上图中2个布局其实都差不多,唯一的区别就是:第二个布局的android:baselineAligned="false";

不难发现有基线的情况下,文字默认都在一条直线上,这样我们有时候就会有布局的麻烦,解决方法当然就是设置基线为false;

同时,我们可以利用基线来布局如布局二的样式,是不是感觉很常见的一个底部菜单栏样式?

注意:基线只对有文字内容,如TextView,EditText,Button等才有效果。


5.权重weight



图一的布局:

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;

6.源码地址

LinearLayoutDemo

你可能感兴趣的:(Android基础布局)