Android Layout主要分布在android.widget下,他们都有相同的父类android.view.ViewGroup.
那么在实际的开发中常用的布局有如下几种:
线性布局(android.widget.LinearLayout):垂直或者水平排列组件
帧布局(android.widget.FrameLayout):为每个子组件创建一个空白区域,这个空白区域就叫做帧.
表格布局(android.widget.TableLayout):依然是线性布局,直接继承android.widget.LinearLayout.采用行列的方式管理组件
相对布局(android.widget.RelativeLayout):相对于父组件或者兄弟组件布局,不需要预先定义参照组件
绝对布局(android.widget.AbsoluteLayout):又称XY布局,布局容器不在管理组件的位置,需要代码指定相应的坐标
网格布局(android.widget.GridLayout):需要设置行列,支持跨行,跨列
线性布局(android.widget.LinearLayout)
布局容器通过根据android:orientation或者setOrientation管理组件的排列方式.
线性布局有如下特点:
case 1(默认情况):
android:orientation=horizontal或者setOrientation(0)时,该种情况下最大的特点就是多个组件占据一行且不换行,水平从左到右依次排列组件.如果组件无法再同一行显示出来,那么多余的组件将不会被显示.
case 2:
android:orientation=vertical或者setOrientation(1)时,该种情况下最大的特点就是单个组件独自占据一行.从上到下依次排列.
常用属性:
不管在何种情况下都可采用android:gravity或者setGravity设置子组件的对其方式.如果组件按照线性方式排列,那么推荐使用线性布局.
帧布局(android.widget.FrameLayout)
布局容器会创建一个一个空白区域,这个空白区域被称为帧.本质还是线性布局.
帧布局有如下特点:
1.每个组件独自占据一帧.
2.在不设置对其方式的情况下.当我们想帧中添加组件时,布局容器会默认把组件放在该区域的左上角.
3.帧布局的大小是由组件中最大的子控件决定的.如果组件大小一致那么我们只能看见最上面的组件其余组件将会被遮盖.后续添加的组件会覆盖前一个组件.
4.不支持将底层的组件移动上来
常用属性:
android:foreground:*设置改帧布局容器的前景图像
android:foregroundGravity:设置前景图像显示的位置
每个组件都可采用android:layout_gravity这是自己的对其方式.该种布局没有任何的android:layout_gravity
表格布局(android.widget.TableLayout)
采用行列的形式管理组件
表格布局有如下特点:
1.不需要声明具体的行列数
2.可以通过添加TableRow的方式向布局中添加行.
3.可以直接添加组件到布局中,此时该组件占据一行一列
4.在TableRow中添加组件,添加多少个组件就代表该row中有几行.
常用属性:
1.Shrinkable:列属性.该列所有的单元格可以被收缩,保证表格适用父容器的宽度
2.Stretchable:列属性.该列所有的单元格可以被拉伸.保证组件能够完全填满表格剩余空间
3.Collapsed:列属性.该列所有的单元格可以被隐藏.
4.支持线性布局的常用属性
表格布局适用于以行列排列的组件.
相对布局(android.widget.RelativeLayout)
必须要有相对应的参照组件且参照组件优先被定义.一般会选择父组件或者兄弟组件为参照组件
相对布局特点:
1.先确定父组件,在定义子组件
常用属性:
1.android:layout_center*:horizontal/vertical/inparent.分别定义了子组件是否水平居中/垂直居中/位于父容器中央
2.android:layout_alignParent*:子组件位于父组件的位置
3.android:layout_*:子组件位于其他组件的位置
使用相对布局可以解决设备屏幕大小,分辨率的问题.不会因为两者的差异导致组件错位.
绝对布局(android.widget.AbsoluteLayout)
必须通过代码定义组件的坐标,因为设备屏幕大小,分辨率的问题,会导致组件错位.不建议使用.
相对布局特点:
1.容器不在管理组件位置
2.需要自定义组件坐标
3.有可能导致组件位置错乱
常用属性:
1.android:layout_x:定义组件X坐标
2.android:layout_y:定义组件Y坐标
网格布局(android.widget.GridLayout)
需要明确定义行列,将布局容器分为若干网格,每个网格中可以添加一个组件.支持跨行/跨列
相对布局特点:
1.需要明确定义行列
2.支持跨行/跨列
常用属性:
1.android:layout_columnSpan:子组件跨几列
2.android:layout_rowSpan:子组件跨几行
在明确行列的情况下可以使用该布局