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 |
该控件的水平基准线相对于某控件或父布局的水平基准线对齐 |
参考
官方文档
https://developer.android.google.cn/reference/android/widget
https://developer.android.google.cn/reference/android/support/constraint/ConstraintLayout
网友评论