Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦。组件按照布局的要求依次排列,就组成了用户所看见的界面。Android的布局分为基本布局和新型布局七种布局方式,下面一起来看看这些布局方式。
布局类型图
Android七大界面布局方式包括: LinearLayout(线性布局)、FrameLayout(框架布局)、TableLayout(表格布局)、RelativeLayout(相对布局)、AbsoluteLayout(绝对布局)、GridLayout(网格布局) 和 ConstraintLayout(约束布局)。
1. LinearLayout(线性布局)
LinearLayout 按照垂直或者水平的顺序依次排列子元素(通过android:orientation属性来控制),每一个子元素都位于前一个元素之后。
属性 | 说明 |
---|---|
orientation | 设置布局排列方式 (horizontal/vertical ) |
layout_weight | 设置所占布局的权重 |
weightSum | 设置最大权重和 |
divider | 设置分割线(color无效) |
showDividers | 设置分割线位置 (none/begining/end/middle ) |
dividerPadding | 设置分割线内边距 |
baselineAligned | 设置子控件文字基线是否对齐 |
baselineAlignedChildIndex | 设置文字基线对齐的子控件(初始值为0) |
2. RelativeLayout(相对布局)
RelativeLayout 按照控件之间相对位置或相对父容器位置进行排列布局。
- 相对于父控件属性
属性 | 说明 |
---|---|
layout_alignParentBottom | 将控件底端与父控件的底端对齐 |
layout_alignParentLeft | 将控件左端与父控件的左端对齐 |
layout_alignParentRight | 将控件右端与父控件的右端对齐 |
layout_alignParentTop | 将控件上端与父控件的上端对齐 |
layout_alignParentStart | 将控件开始位置与父控件的开始位置对齐 |
layout_alignParentEnd | 将控件结束位置与父控件的结束位置对齐 |
layout_centerHorizontal | 将控件位于父控件的水平方向中间位置 |
layout_centerVertical | 将控件位于父控件的垂直方向中间位置 |
layout_centerInParent | 将控件位于父控件的水平和垂直方向中间位置 |
- 相对于指定控件属性
属性 | 说明 |
---|---|
layout_above | 将控件位于指定id控件的上方 |
layout_below | 将控件位于指定id控件的下方 |
layout_toLeftOf | 将控件位于指定id控件的左边 |
layout_toRightOf | 将控件位于指定id控件的右边 |
layout_alignBottom | 将前控件与指定id控件的下边缘对齐 |
layout_alignLeft | 将控件与指定id控件的左边缘对齐 |
layout_alignRight | 将控件与指定id控件的右边缘对齐 |
layout_alignTop | 将控件与指定id控件的上边缘对齐 |
layout_alignStart | 将控件与指定id控件的开始位置对齐 |
layout_toStartOf | 将控件位于指定id控件的开始位置 |
layout_alignEnd | 将控件与指定id控件的结束位置对齐 |
layout_toEndOf | 将控件位于指定id控件的结束位置 |
layout_alignBaseline | 将控件的基线与指定id控件t的基线对齐 |
3. TableLayout(表格布局)
Tablelayout 以行和列的形式对控件进行管理,每一行为一个TableRow对象,或一个View控件。当为TableRow对象时,可在TableRow下添加子控件,默认情况下,每个子控件占据一列。有多少个子控件就有多少列;当为View时,该View将独占一行。
属性 | 说明 |
---|---|
collapseColumns | 设置要隐藏的列 |
shrinkColumns | 设置要收缩的列 |
stretchColumns | 设置可拉伸的列 |
layout_column | 设置单元格显示列 |
layout_span | 设置单元格占据列 |
4. FrameLayout(框架布局)
FrameLayout 整个界面被当成一块空白备用区域,所有的子元素都不能被指定放置的位置,它们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡。
5. AbsoluteLayout(绝对布局)
AbsoluteLayout布局已经被废弃,不推荐使用,多用于指定屏幕的设备,而是由开发人员自己通过X坐标、Y坐标来控制组件的位置。
属性 | 说明 |
---|---|
layour_x | 设置控件的x坐标 |
layour_y | 设置控件的y坐标 |
6. GridLayout(网格布局)
GridLayout 是Android4.0增加的网格布局控件,与之前的TableLayout有些相似,它把整个容器划分为rows × columns个网格,每个网格可以放置一个组件。性能及功能都要比Tablelayout好,比如GridLayout布局中的单元格可以跨越多行,而tablelayout则不行,此外,其渲染速度也比Tablelayout要快。
- 本身属性
属性 | 说明 |
---|---|
rowCount | 设置最大行数 |
columnCount | 设置最大列数 |
- 子元素属性
属性 | 说明 |
---|---|
layout_row | 设置子控件的行数 |
layout_column | 设置子控件的列数 |
layout_rowSpan | 设置控件所占的列数 |
layout_columnSpan | 设置控件所占的列数 |
layout_rowWeight | 设置控件的行权重 |
layout_columnWeight | 设置控件的列权重 |
7. ConstraintLayout(约束布局)
Constraint Layout 是Android Studio 2.2中主要的新增功能之一,也是Google在2016年的Google I/O大会上提出的一个可以灵活控制子控件的位置和大小的新布局。它可以有效地解决布局嵌套过多的问题。我们平时编写界面,复杂的布局总会伴随着多层的嵌套,而嵌套越多,程序的性能也就越差。ConstraintLayout则是使用约束的方式来指定各个控件的位置和关系的,它有点类似于RelativeLayout,但远比RelativeLayout要更强大。
属性 | 说明 |
---|---|
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_constraintStart_toStartOf | 该控件的开始部分相对于某控件或父布局的开始部分对齐 |
layout_constraintStart_toEndOf | 该控件的开始部分相对于某控件或父布局的结束部分对齐 |
layout_constraintEnd_toStartOf | 该控件的结束部分相对于某控件或父布局的开始部分对齐 |
layout_constraintEnd_toEndOf | 该控件的结束部分相对于某控件或父布局的结束部分对齐 |
layout_constraintBaseline_toBaselineOf | 该控件的水平基准线相对于某控件或父布局的水平基准线对齐 |