1.XML布局优点:
在XML文件中设计UI可以更好地将应用的外观与控制应用行为的代码隔离,每次修改或调整界面布局只需要修改XML文件的代码而不是修改源码和重新编译。
2.常见的XML布局:
-
RelativeLayout(相对布局):
能够指定子对象彼此之间的相对位置或子对象与父对象的相对位置,自由度是最大的一种布局。(使用的频率相对较高)
注意:margin和padding的使用容易混淆:
margin是边缘(外边距),指该控件距离父控件或其他控件的边距;padding是填充(内边距),指该控件内部内容 -
TableLayout(表格布局):
显示滚动的单列列表,在手机设置基本就是使用的这种布局。TableLayout有点像一个表格或是矩阵。在布局中加入TableRow,它的属性是horizontal,所以每个TableRow只能横放。它里面的每个控件的高都是一样的。 -
LinearLayout( 线性布局):
线性布局分两种。一种是水平布局,一种是垂直布局。
属性 | 作用 |
---|---|
orientation | 控价的布局方式(有水平布局和竖直布局) |
gravity | 当前元素的子元素相对它的对齐方式 |
layout_gravity | 当前元素相对它的父元素的对齐方式 |
-
FrameLayout(帧布局):
帧布局
这个布局很简单,就是控件一个挨一个在左上角罗列。帧布局的大小由控件中最大的子控件决定,如果控件的大小一样大的话,那么同一时刻就只能看到最上面的那个组件,后续添加的控件会覆盖前一个。
-
AbsoluteLayout(绝对布局):
绝对布局比较容易使用,以左上方为原点建立坐标系。每个控件用layout_x和layout_y表示位置。 -
ConstraintLayout(约束布局):
-
简介:已经取代RelativeLayout成了创建空Activity的默认布局,非常强大。布局原理:根据布局中的其他元素或视图, 确定View在屏幕中的位置, 受到三类约束, 即其他视图, 父容器(parent), 基准线(Guideline)。
举个例子:
效果图
代码:
<TextView
android:id="@+id/TextView1"
...
android:text="TextView1" />
<TextView
android:id="@+id/TextView2"
...
app:layout_constraintLeft_toRightOf="@+id/TextView1" />
<TextView
android:id="@+id/TextView3"
...
app:layout_constraintTop_toBottomOf="@+id/TextView1" />
- group:
可以把多个控件归为一组,便于管理,例:
<TextView
android:id="@+id/TextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/TextView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toRightOf="@+id/TextView1" />
<TextView
android:id="@+id/TextView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toRightOf="@id/TextView2" />
效果图
现在有3个并排的TextView,用Group把TextView1和TextView3归为一组,再设置这组控件的可见性,如下所示:
<android.support.constraint.Group
android:id="@+id/group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"
app:constraint_referenced_ids="TextView1,TextView3" />
效果图
- 补充:布局还可以嵌套使用,比如RelativeLayout中可以嵌套一个或多个RelativeLayout,同样也可以嵌套其他的布局。
3.xml 配置参数:
-
属性值为true或false:
android:layout_centerHrizontal 水平居中
android:layout_centerVertical 垂直居中
android:layout_centerInparent 相对于父元素完全居中
android:layout_alignParentBottom 贴紧父元素的下边缘
android:layout_alignParentLeft 贴紧父元素的左边缘
android:layout_alignParentRight 贴紧父元素的右边缘
android:layout_alignParentTop 贴紧父元素的上边缘
android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物 -
属性值必须为id的引用名:
android:layout_below 在某元素的下方
android:layout_above 在某元素的的上方
android:layout_toLeftOf 在某元素的左边
android:layout_toRightOf 在某元素的右边
android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐 -
属性值为具体的像素值,如30dip,40px:
android:layout_marginBottom 离某元素底边缘的距离
android:layout_marginLeft 离某元素左边缘的距离
android:layout_marginRight 离某元素右边缘的距离
android:layout_marginTop 离某元素上边缘的距离 -
constraint类:
layout_constraintLeft_toLeftOf 一个元素的左边缘与另一个元素左边缘重合
layout_constraintLeft_toRightOf 一个元素的左边缘与另一个元素右边缘重合
layout_constraintRight_toLeftOf 一个元素的右边缘与另一个元素左边缘重合
layout_constraintRight_toRightOf 一个元素的右边缘与另一个元素右边缘重合
layout_constraintTop_toTopOf 一个元素的顶部与另一个元素顶部重合
layout_constraintTop_toBottomOf 一个元素的顶部与另一个元素底部重合
layout_constraintBottom_toTopOf 一个元素的底部与另一个元素顶部重合
layout_constraintBottom_toBottomOf 一个元素的底部与另一个元素底部重合
layout_constraintBaseline_toBaselineOf 一个元素的底部与另一个元素底部重合
layout_constraintStart_toEndOf 一个元素的左边缘与另一个元素右边缘重合
layout_constraintStart_toStartOf 一个元素的左边缘与另一个元素左边缘重合
layout_constraintEnd_toStartOf 一个元素的右边缘与另一个元素左边缘重合
layout_constraintEnd_toEndOf 一个元素的右边缘与另一个元素右边缘重合
layout_constraintVertical _weight 一个元素高度占父视图高度的比例
layout_constraintHorizontal_weight 一个元素宽度占父视图宽度的比例 ,例:
app:layout_constraintHorizontal_weight="1"
//这个视图宽度占父视图宽度的1/n(n为子视图的个数)
layout_constraintVertical _weight 一个元素高度占父视图高度的比例
注意:这些属性的值即可以是parent,也可以是某个view的id。
网友评论