Android的布局
一, 线性布局 LinearLayout 继承ViewGroup
将布局中的子控件, 按照水平或者垂直方向排列
特点:
1, 垂直线性布局, 每一行只能放一个控件, 到底部装不下了则会挤出屏幕(全部或部分显示)
2, 水平线性布局, 每一列只能放一个控件, 到右边装不下了则会挤出屏幕(全部或部分显示)
属性:
1, android:orientation ="" 设置排列方式
属性值: vertical 所有子控件垂直排列
horizontal 所有子控件水平排列
2, android:layout_weight = "" 权重 , 子控件在父容器中的剩余空间的占比
线性布局特有的属性, 权重值越大, 所占的空间越大
备注: 1, 如果水平方向上设置权重, 就把layout_width 设置为0dp
2, 如果垂直方向上设置权重, 就把layout_height 设置为0dp
3, 设置布局中所有子控件的重力方向[外对内的要求]
android:gravity="center/right/bottom....."
4, 设置自控件相对于父容器的位置[内对外的请求]
android:layout_gravity= "center/right/bottom....."
注意:
当父容器设置为垂直排列, 子控件不能设置垂直方向上的属性, 例如: bottom , center_vertical
当父容器设置为水平排列, 子控件不能设置水平方向上的属性, 例如: right , center_horizontal
二, 相对布局 RelativeLayout 继承ViewGroup
概念: 控件与控件或者控件与父容器之间的相对位置
分类:
1, 子控件相对于父容器的位置 7个
居中对齐
android:layout_centerHorizontal = "true" 水平居中
android:layout_centerVertical = "true" 垂直居中
android:layout_centerInParent = "true" 完全居中
位置对齐
android:layout_alignParentTop="true" 子控件与父容器的顶部对齐
android:layout_alignParentBottom="true" 子控件与父容器的底部对齐
android:layout_alignParentLeft="true" 子控件与父容器的左边对齐
android:layout_alignParentRight="true" 子控件与父容器的右边对齐
2, 子控件与兄弟控件的位置 9个
放置位置
android:layout_toLeftOf="@id/but1" 该控件显示在ID为but1的左侧
android:layout_toRightOf="@id/but1" 该控件显示在ID为but1的右侧
android:layout_above ="@id/but1" 该控件显示在ID为but1的上方
android:layout_below="@id/but1" 该控件显示在ID为but1的下方
对齐方式
android:layout_alignLeft="@id/but1" 该控件与指定控件的左边对齐
android:layout_alginRight = "@id/but1" 该控件与指定控件的右边对齐
android:layout_alginTop="@id/but1" 该控件与指定控件的顶部对齐
android:layout_alginBottom="@id/but1" 该控件与指定控件的底部对齐
android:layout_alginBaseline="@id/but1"该控件与指定控件的基准线对齐(首行文本对齐)
注意:
1, 线性布局中的属性在相对布局中不一定起效果, 比如:weight
2, 相对布局中的属性在线性布局中不一定起效果
= 扩展==
三, 帧布局 FrameLayout
每个控件都是一帧, 当前的子控件会覆盖前一个子控件
代表: 霓虹灯
四, 网格布局 4.0 后出现 API 14以上
1, 指定网格布局中的行数和列数
android:rowCount = "3" 行的数量
android:columnCount="3" 列的数量
2, 控件显示在第几行 第几列
android:layout_row = "0" 控件在第几行显示 (默认从0开始)
android:layout_column="0" 控件在第几列显示
3, 合并单元格
android:layout_rowSpan = "2" 行的跨度
android:layout_columnSpan="2" 列的跨度
android:layout_gravity="" 填充所跨越的行和列
属性值:
fill
fill_horizontal 水平方向填充
fill_vertical 垂直方向填充