布局
LinearLayout 线性布局
这种布局方式比较常用,也很简单,每个元素按照顺序依次线性排列。
LinearLayout按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。如果是垂直排列,那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为多少;如果是水平排列,那么将是一个单行N列的结构。如果搭建两行两列的结构,通常的方式是先垂直排列两个元素,每一个元素里再包含一个LinearLayout进行水平排列。
LinearLayout 属性:
android: orientation="vertical"
值有水平(horizontal)和垂直(vertical)两个。
LinearLayout 属性及子元素属性
android:layout_weight="1"
它用于描述该子元素在剩余空间中占有的大小比例,一般建议layout_width="0dp" 或 layout_height="0dp" 配上 layout_weight 就可以实现对整个空间的比例分割了。
LinearLayout 子元素属性
android:layout_gravity="right"
值包含如下:
值 | 含意 |
---|---|
top | 将对象放在其容器的顶部,不改变其大小. |
bottom | 将对象放在其容器的底部,不改变其大小. |
left | 将对象放在其容器的左侧,不改变其大小. |
right | 将对象放在其容器的右侧,不改变其大小. |
center_vertical | 将对象纵向居中,不改变其大小. 垂直对齐方式:垂直方向上居中对齐。 |
fill_vertical | 必要的时候增加对象的纵向大小,以完全充满其容器. 垂直方向填充 |
center_horizontal | 将对象横向居中,不改变其大小.水平对齐方式:水平方向上居中对齐 |
fill_horizontal | 必要的时候增加对象的横向大小,以完全充满其容器.水平方向填充 |
center | 将对象横纵居中,不改变其大小. |
fill | 必要的时候增加对象的横纵向大小,以完全充满其容器. |
clip_vertical | 附加选项,用于按照容器的边来剪切对象的顶部和/或底部的内容. 剪切基于其纵向对齐设置:顶部对齐时,剪切底部;底部对齐时剪切顶部;除此之外剪切顶部和底部.垂直方向裁剪 |
clip_horizontal | 附加选项,用于按照容器的边来剪切对象的左侧和/或右侧的内容. 剪切基于其横向对齐设置:左侧对齐时,剪切右侧;右侧对齐时剪切左侧;除此之外剪切左侧和右侧.水平方向裁剪 |
总结:
- 有一个布局方向,水平或者竖直
- 在竖直布局下,左对齐、右对齐,水平居中生效
- 在水平布局下,顶部对齐、底部对齐、竖直居中生效
- 权重:按比例分配屏幕的剩余宽度或者高度
RelativeLayout 相对布局
RelativeLayout是一种相对布局,控件的位置是按照相对位置来计算的,后一个控件在什么位置依赖于前一个控件的基本位置,是布局最常用,也是最灵活的一种布局。
RelativeLayout用到的一些重要的属性:
第一类:属性值为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的引用名“@id/id-name”
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 离某元素上边缘的距离
总结:
- 组件默认位置都是左上角,组件之间可以重叠
- 可以相对于父元素上下左右对齐,相对于父元素,水平居中、竖直居中、水平竖直同时居中
- 可以相对于其他组件上下左右对齐
- 可以布局于其他组件的上方、下方、左边、右边
FrameLayout 帧布局
在这个布局中,整个界面被当成一块空白备用区域,所有的子元素都不能被指定放置的位置,它们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡。
总结:
- 组件默认位置都是左上角,组件之间可以重叠
- 可以设置上下左右对齐,水平竖直居中,设置方式与线性布局一样
TableLayout 表格布局
表格布局是按照表的形式布局。一个TableLayout由许多TableRow组成,一个TableRow就代表TableLayout中的一行。TableRow是LinearLayout的子类,TableRow也是容器,因此可以向TableRow里面添加其他组件,每添加一个组件该表格就增加一列。
表格布局常用的属性如下:
android:collapseColumns:隐藏指定的列
android: shrinkColumns:收缩指定的列以适合屏幕,不会挤出屏幕
android: stretchColumns:尽量把指定的列填充空白部分
android: layout_column:控件放在指定的列
android: layout_span:该控件所跨越的列数
总结:
- 每有一个TableRow子节点表示一行,该子节点的每一个子节点都表示一列
- TableLayout的一级子节点默认宽都是匹配父元素
- TableRow的子节点默认宽高都是包裹内容
AbsoluteLayout 绝对布局
在此布局中的子元素的android:layout_x和android:layout_y属性将生效,用于描述该子元素的坐标位置。屏幕左上角为坐标原点(0,0),第一个0代表横坐标,向右移动此值增大,第二个0代表纵坐标,向下移动,此值增大。在此布局中的子元素可以相互重叠。在实际开发中,通常不采用此布局格式,因为它的界面代码过于刚性,以至于有可能不能很好的适配各种终端。在Android2.0 API文档中标明该类已经过期,可以使用FrameLayout或者RelativeLayout来代替。