一、常用属性
1、orientation
布局中组件的排列方式,有以下两种方式:
- horizontal(水平)
- vertical(竖直)
2、gravity
该组件包含子元素的对齐方式:top、bottom、left、right
可以同时指定多个值,使用 |
隔开,例如:left|bottom
3、layout_gravity
和上一个属性用法类似,不过该属性代表:本控件在父容器中的对齐方式
4、layout_width
表示该控件的宽度,一般取值: match_parent
和 wrap_content
5、layout_height
表示该控件的高度,一般取值: match_parent
和 wrap_content
6、id
标识该控件的唯一标识,同一个xml文件里面id是不可重复的。但是不同文件里面id是可以重复的
7、background
该属性可以为控件设置背景图或直接给一个颜色作为背景
该属性是为 设置权重的
- 若为子控件设置属性
layout_width="0dp"
和layout_weight="1"
,则该控件就会占据父控件横向上的所有剩余空间 - 同理如果设置
layout_height="0dp"
和layout_weight="1"
,则该控件就会占据父控件纵向上的所有剩余空间 - 如果有多个同级控件都设置了
layout_weight
属性,则按照对应的比例划分 - 如果想横向按比例划分,但设置了
layout_width="wrap_content"
,此时分两种情况:- 如果按权重分配的空间不够显示该控件,则按照
wrap_content
来分配 - 否则,按照权重分配
- 如果按权重分配的空间不够显示该控件,则按照
- 如果想横向按比例划分,但设置了
layout_width="match_parent"
,此时需要计算实际分配到的空间:
设有三个控件按权分配父控件的横向空间,但宽度都设置为 match_parent,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#FF0000"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="2"
android:background="#00FF00"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="3"
android:background="#0000FF"/>
</LinearLayout>
计算实际分配的宽度步骤:
step 1:有三个控件是 match_parent,但是屏幕只有一个,所以 1 - 3 = -2 match_parent
step 2:三个控件的权重比分别为:1/6, 2/6, 3/6
stip 3:分配到的空间分别为:1 - 2 * (1/6) = 2/3 match_parent、1 - 2 * (2/6) = 1/3 match_parent、1 - 2 * (3/6) = 0 match_parent
9、divider
该属性设置在 LinearLayout
标签中,用于指定分割线
-
divider="@drawable/line"
指定分割线的图片,指定颜色不显示 -
showDividers="beginning"
指定分割线显示的位置 -
dividerPadding="10dp"
指定分割线两端到边界的距离
如果 LinearLayout
是横向布局,则分割线也是横向的。同理,LinearLayout
是纵向布局,则分割线也是纵向的。
showDividers
属性有 4 种取值:
- none(分割线不显示)
- beginning(在所有子布局的最前面或最上面)
- end(在所有子布局的最后面或最下面)
- middle(只有子布局之间才会插入一条分割线)
- 当
LinearLayout
设置orientation="vertical"
时,layout_gravity
在水平方向上的设置才起作用,垂直方向的设置不起作用。即只有left
,right
,center_horizontal
是生效的。 - 当
LinearLayout
设置orientation="horizontal"
时,layout_gravity
在竖直方向上的设置才起作用,水平方向的设置不起作用。即只有top
,bottom
,center_vertical
是生效的。