布局
Android七大基本布局通用属性 线性布局LinearLayout
常见属性
布局方向布局相对位置布局权重设置分割线(不常用) 相对布局RelativeLayout
常见属性
基本属性根据父容器定位根据兄弟组件定位 表格布局TableLayout
常见属性 帧布局frameLayout
常见属性 网格布局GridLayout
常见属性
布局 安卓布局其实和HTML里的盒子模型类型,也存在padding,margin等。
- 线性布局:LinearLayout相对布局:RelativeLayout表格布局:TableLayout层(帧)布局:frameLayout绝对布局:AbsoluteLayout网格布局:GridLayout约束布局:ConstraintLayout
布局用的最多的是线性布局和相对布局。其中表格布局是线性布局的子类,而因为适配的原因,绝对布局几乎是很少见的。
通用属性| 属性 | 描述 |
|---|---|
| layout_width | 宽 |
| layout_height | 高 |
| padding | 内边距 |
| margin | 外边距 |
| visibility | visible:显示; invisible:不现实但是占用空间; gone:不显示也不占用空间 |
| focusable | 是否可以获取焦点 |
| enabled | 是否启用该控件 |
| background | 背景色,16进制值 |
| id | 唯一标识符(id必须唯一),用于定位该控件 |
其中padding和margin可以分别控制单独上下左右,比如paddingTop,paddingLeft, marginRight等。
线性布局LinearLayout线性布局是一种非常实用的布局。线性布局具有水平方向与垂直方向的两种布局方式。是通过属性“android:orientation”控制布局方向(默认水平方向)
常见属性 布局方向| 属性 | 描述 |
|---|---|
| orientation(重要) | 设置线性布局方向。 horizontal:水平方向 vertical:竖直方向 |
| 属性 | 描述 |
|---|---|
| gravity | 控制该组件所包含的子元素的对齐方式,可以多个组合,如(left |
| layout_gravity | 控制子组件在父组件中的位置。写在子组件上,控制自己在父组件中的位置。 |
gravity:
layout_gravity:
如果两个都设置,那么按后者效果来。
| 属性 | 描述 |
|---|---|
| layout_weight | 设置了布局方向,以 剩余空间 为基准,该控件所占权重。 |
| weightSum | 定义了weight 总和的最大值(单独设置没效果)。 |
这边最关键的词是剩余空间,他指的是在布局方向上,除去所有组件自身所占空间和margin所占空间之后,剩余的值。以水平方向布局为例:水平方向总宽度为700dp,并且有组件A和B,组件A设置layout_width=200dp;layout_margin=50dp; 组件B设置layout_width=100dp;那么水平方向剩余空间为:700-50-200-50-100=300dp。
这时,我们将剩余空间(300dp)分为3份(weightSum=3),组件A占2份(layout_weight=2),组件B占1份(layout_weight=1)。
此时,我们不难发现,该水平方向空间占比依次为:marginLeft:50dp ---- 组件A:400dp(200dp+200dp) ---- marginRight:50dp ---- 组件B:200dp(100dp+100dp)。
注意:weightSum是可以不设置的。如果weightSum没有设置,Android会根据子组件所设置的layout_weight计算出weightSum的值。
分割线(不常用)| 属性 | 描述 |
|---|---|
| divider | 为LinearLayout设置分割线所使用的的图片。 |
| showDividers | 设置分割线所在位置,值为:none, middle, begining, end。 |
| dividerPadding | 设置分割线的Padding。 |
如果当需要嵌套多层的 LinearLayout,界面就会变得尤为复杂,复杂的界面势必会带来UI Render的效率(渲染速度)降低等问题,而且如果在listview或者GridView上的 item,效率会更低,另外太多层LinearLayout嵌套会占用更多的系统资源,还有可能引发stackoverflow等问题,这时,RelativeLayout就能很好的解决,它仅仅只需要一层就可以完成.而在现实业务需求中,我们常用的方式是:RelativeLayout + LinearLayout的weight属性搭配使用。
常见属性 基本属性| 属性 | 描述 |
|---|---|
| gravity | 控制该组件所包含的子元素的对齐方式,可以多个组合,如(left |
| ignoreGravity | 设置该组件是否受gravity影响,如果设置为true,则不受gravity影响。 |
| 属性 | 描述 |
|---|---|
| layout_alignParentLeft | 控制该组件左对齐。 |
| layout_alignParentRight | 控制该组件右对齐。 |
| layout_alignParentTop | 控制该组件顶部对齐。 |
| layout_alignParentBottom | 控制该组件底部对齐。 |
| 属性 | 描述 |
|---|---|
| layout_centerHorizontal | 控制该组件水平居中。 |
| layout_centerVertical | 控制该组件垂直居中。 |
| layout_centerInParent | 控制该组件处于中间位置。 |
| 属性 | 描述 |
|---|---|
| layout_toLeftOf | 控制该组件在兄弟组件的左侧。 |
| layout_toRightOf | 控制该组件在兄弟组件的右侧。 |
| layout_above | 控制该组件在兄弟组件的上方。 |
| layout_below | 控制该组件在兄弟组件的下方。 |
| layout_alignTop | 控制该组件在兄弟组件的上边界。 |
| layout_alignBottom | 控制该组件在兄弟组件的下边界。 |
| layout_alignLeft | 控制该组件在兄弟组件的左边界。 |
| layout_alignRight | 控制该组件在兄弟组件的右边界。 |
注意:这里是通过ID去获取兄弟组件的。
下面四个组件主要是设置对齐,当比如某个组件比较长或者比较短,设置对齐后可以使得长度一样长。
在TableLayout中,一个TableRow则为一行。后面我们更多用GridLayout代替TableLayout
常见属性| 属性 | 描述 |
|---|---|
| collapseColumns | 设置需要被隐藏的列的序号 |
| shrinkColumns | 设置允许被收缩的列的列序号 |
| layout_column | 设置跳过n个 |
| layout_span | 设置合并n个单元格 |
上述三个属性的序列号都是从0开始算的,比如collapseColumns= “1”,对应的是第二列!当然也可以设置多个,如果需要设置多个,可以用逗号分隔(collapseColumns=“1,2”),如果设置为collapseColumns="*",则所有列都生效
帧布局frameLayout
frameLayout(帧布局)可以说是七大布局中最为简单的一个布局,这个布局直接在屏幕上开辟出一块空白的区域,当我们往里面添加控件的时候,会默认把他们放到这块区域的左上角,而这种布局方式却没有任何的定位方式,所以它应用的场景并不多;帧布局的大小由控件中最大的子控件决定,如果控件的大小一样大的话,那么同一时刻就只能看到最上面的那个组件!后续添加的控件会覆盖前一个!
常见属性| 属性 | 描述 |
|---|---|
| foreground | 设置改帧布局容器的前景图像 |
| foregroundGravity | 设置前景图像显示的位置 |
帧布局用的不是很多,在这里不详细介绍了,感兴趣的可以看:帧布局。
网格布局GridLayout网格布局是Android 4.0以后引入的一个新的布局,可以很方便的设置N行N列。
常见属性| 属性 | 描述 |
|---|---|
| orientation | 设置线性布局方向。 horizontal:水平方向 vertical:竖直方向 |
| layout_gravity | 控制子组件在父组件中的位置。写在子组件上,控制自己在父组件中的位置。 |
| rowCount | 设置网格布局行数 |
| columnCount | 设置网格布局列数 |
| layout_row | 设置组件位于第N行 |
| layout_column | 设置组件位于第N列 |
| rowSpan | 设置组件纵向横跨N行 |
| columnSpan | 设置组件横向向横跨N行 |
网格布局用的不是很多,在这里不详细介绍了,感兴趣的可以看:网格布局。



