一、Android六大基本布局
- Android六大基本布局分别是:线性布局LinearLayout、表格布局TableLayout、相对布局RelativeLayout、帧布局FrameLayout、绝对布局AbsoluteLayout、网格布局GridLayout。
- 其中,表格布局是线性布局的子类。网格布局是android 4.0后新增的布局。在手机程序设计中,绝对布局基本上不用,用得相对较多的是线性布局和相对布局。
二、LinearLayout(线性布局)
常用属性:
- android:id:为该组件添加一个资源id,即标识符,可以通过id来找到该布局或者控件。
- android:layout_width:布局的宽度,用wrap_content表示组件的实际宽度,match_parent表示填充父容器
- android:layout_height:布局的长度,用wrap_content表示组件的实际长度,match_parent表示填充父容器
- android:orientation:布局中的排列方式,有两种方式:horizontal水平,vertical竖直,如果不设置则默认水平显示
- orientation 是一个视图组,可以在一个方向垂直或者水平分布所有子项
- 当 android:orientation=“vertical” 时, 只有水平方向的设置才起作用,垂直方向的设置不起作用.即:left,right,center_horizontal 是生效的.
- 当 android:orientation=“horizontal” 时, 只有垂直方向的设置才起作用,水平方向的设置不起作用.即:top,bottom,center_vertical 是生效的.
- android:gravity:控制组件所包含的子元素的对齐方式
- android:layout_gravity:控制该组件在父容器里的对齐方式
- android:layout_gravity是本(子)元素相对于父元素的对齐方式设置在子元素上.
- android:gravity="bottom|right"是本(父)元素所有子元素的对齐方式,设置在父元素上,多个值用 | 隔开.
- 其属性值分别为:center(整体居中)、center_vertical(垂直居中)、center_horizontal(水平居中)、right(居右)、left(居左)、bottom(底部)和top(顶部)
- android:background:为该组件添加一个背景图片或者背景颜色,颜色常以六位的十六进制表示
- android:layout_margin :外边距,布局或控件距离外部元素的边距
- android:layout_padding :内边距,布局或控件距离内部元素的边距
- android:layout_weight:权重,除了被显示占据的空间以外的的空间,然后根据权重的大小来分配空间,使用权重通常会把分配该权重方向的宽度设置为0dp,如果未设置0dp,则该控件会占据指定的宽度,然后再加上根据权重来分配的空间
三、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 离某控件上边缘的距离
四、GridLayout(网格布局)
Android4.0之后新加的布局管理器
能够把整个容器划分为rows*columns的网格,每个网格可以放置一个组件
可以设置一个组件横跨多少列或者纵跨多少行
当单元格大小大于组件大小时,可以通过设置layout_grativity属性值,设置组件在单元格里的位置
通过设置layout_columnWeight/layout_rowWeight属性值,可以设置各个组件的大小比例
GridLayout 使用属性
- android:columnCount 最大列数
- android:rowCount 最大行数
- android:orientation GridLayout中子元素的布局方向
- android:alignmentMode alignBounds:对齐子视图边界 alignMargins :对齐子视距内容,默认值
- android:columnOrderPreserved 使列边界显示的顺序和列索引的顺序相同,默认是true
- android:rowOrderPreserved 使行边界显示的顺序和行索引的顺序相同,默认是true
- android:useDefaultMargins 没有指定视图的布局参数时使用默认的边距,默认值是false
item属性
- android:layout_column 指定该单元格在第几列显示
- android:layout_row 指定该单元格在第几行显示
- android:layout_columnSpan 指定该单元格占据的列数
- android:layout_rowSpan 指定该单元格占据的行数
- android:layout_gravity 指定该单元格在容器中的位置
- android:layout_columnWeight (API21加入)列权重
- android:layout_rowWeight (API21加入) 行权重
- android:layout_gravity 作用
- center 不改变元素的大小,仅居中
- center_horizontal 不改变大小,水平居中
- center_vertical 不改变大小,垂直居中
- top 不改变大小,置于顶部
- left 不改变大小,置于左边
- bottom 不改变大小,置于底部
- right 不改变大小,置于右边
- start 不改变大小,根据系统语言,置于开始位置
- end 不改变大小,置于结尾
- fill 拉伸元素控件,填满其应该所占的格子
- fill_vertical 仅垂直方向上拉伸填充
- fill_horizontal 仅水平方向上拉伸填充
- clip_vertical 垂直方向上裁剪元素,仅当元素大小超过格子的空间时
- clip_horizontal 水平方向上裁剪元素,仅当元素大小超过格子的空间时
- 注意:使用layout_columnSpan 、layout_rowSpan时要加上layout_gravity属性,否则没有效果;另外item在边缘时宽高计算会出现错误,需要我们手动设置宽高,否则达不到想要的效果
五、TableLayout(表格布局)
继承LinearLayout
不需要明确的申明包含多少行多少列
通过添加 TableRow / 其他组件 来控制表格的行数和列数
单元格设置格式有3种:Shrinkable(可收缩),Stretchable(可拉伸),Collapsed(隐藏的)
<!--定义一个表格布局,指定第2 列可收缩,第3 列隐藏,第4列可拉伸-->
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/table01"
android:shrinkColumns="1"
android:collapseColumns="2"
android:stretchColumns="3">
六、FrameLayout(帧布局)
- 所有的控件都会默认摆放在布局的左上角
- 使用android:layout_gravity属性来指定控件在布局中的对齐方式,这和LinearLayout中的用法是相似的。
- FrameLayout由于定位的欠缺,导致它的应用场景也比较少,不过之后使用Fragment碎片的时候是可以使用到的。
来源:CSDN
作者:94qiang
链接:https://blog.csdn.net/weixin_42777389/article/details/104079879