简述Android六大布局样式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014799068/article/details/50695451

首先来看一下Android布局管理器的类图:
Android布局管理器类图
从图中可以看出布局管理器是继承了View,所以可以作为普通UI组件使用。所有布局都可以作为容器类使用,调用多个重载的addView()向布局管理器中添加组件。
从上面的图中我们可以看出这五大布局样式分别是:
1.线性布局:LinearLayout
2.表格布局:TableLayout
3.帧布局:FrameLayout
4.相对布局:RelativeLayout
5.绝对布局:AbsoluteLayout
6.GridLayout
1、线性布局(LinearLayout):
线性布局就是将容器里的组件一个挨一个地排列起来。LinearLayout通过设置android:orientation属性来控制各组件的排列方式(水平排列,垂直排列)。线性布局不会换行:当组件一个挨着一个排列到末尾后,剩下的组件将不会被显示出来。
常用属性:
android:gravity 设置布局管理器内组件的对齐方式。(多个属性值之间用竖线隔开,竖线前后千万不能出现空格)
android:orientation 设置布局管理器内组件的排列方式。
2、表格布局(TableLayout)
表格布局采用行、列的形式来管理UI组件,TableLayout并不需要明确地声明包含多少行、多少列,而是通过添加TableRow、其他组件来控制表格的行数和列数。(TableRow就是一个表格行,也是容器)。
表格的宽度由该列中最宽的那个单元格决定,整个表格布局的宽度则取决于福容器的宽度。
单元格设置的三种行为方式:
1.Shrinkable:如果某个列被设定为Shrinkable,那么该列的所有单元格的宽度可以被收缩,以保证该表格能适应父容器的宽度。(android:shrinkColumns)
2.Stretchable:如果某个列被设为Stretchable,那么该列的所有单元格的宽度可以被拉伸,以保证组件能完全填满表格空余空间。(android:stretchColumns)
3.Collapsed:如果某个列被设为Stretchable,那么该列的所有单元格会被隐藏。(android:collapseColumns)
3、帧布局(FrameLayout)
帧布局直接继承了VIewGroup,它为每个加入其中的组件创建一个空白的区域(称为一帧),所有每个子组件占据一帧,这些帧都会根据gravity属性执行自动对齐。
属性:
android:foreground 设置该帧布局容器的前景图像。
android:foregroundGravity 定义绘制前景图像的gravity属性。
4、相对布局(RelativeLayout)
相对布局容器内子组件的位置总是相对兄弟组件、父容器来决定的。
RelativeLayout属性:
android:gravity 设置该布局容器内部各个组件的对齐方式
android:ignoreGravity 设置哪个组件不受gravity组件的影响
RelativeLayout提供了一个内部类**RelativeLayout.LayoutParams来控制该布局容器中各个组件的布局分布。该类只能设为true、false的XML属性有:
android:layout_centerHorizontal 控制该子组件是否位于布局容器的水平居中位置。
android:layout_centerVertical 控制该子组件是否位于布局容器的垂直居中位置
android:layout_centerInParent 控制该子组件是否位于布局容器的中央位置
android:layout_alignParentLeft 控制该子组件是否与布局容器左边对齐·
android:layout_alignParentBottom 控制该子组件是否与布局容器左边对齐
android:layout_alignParentRight 控制该子组件是否与布局容器右边对齐
android:layout_alignParentTop 控制该子组件是否与布局容器顶端对齐
RelativeLayout.LayoutParams里只能设为其他UI组件ID的属性
android:layout_toRightOf 控制该子组件位于给出ID组件的右侧
android:layout_toLeftOf 控制该子组件位于给出ID组件的左侧
android:layout_above 控制该子组件位于给出ID组件的上方
android:layout_below 控制该子组件位于给出ID组件的下方
android:layout_alignTop 控制该子组件位于给出ID组件的上边界对齐
android:layout_alignBottom
android:layout_alignLeft
android:layout_alignRight
绝对布局(AbsoluteLayout)
使用AbsoluteLayout作为布局管理器时,布局容器不在管理子组件的位置、大小。
layout_x:指定该子组件的X坐标。
layout_y:指定该子组件的Y坐标。
注:在开发Android应用时不建议使用决定布局,会难兼顾不同屏幕大小、分辨率的问题。

GridLayout布局(Android4.0以后引入)
GridLayout布局使用虚细线将布局划分为行、列和单元格,也支持一个控件在行、列上都有交错排列。

而GridLayout使用的其实是跟LinearLayout类似的API,只不过是修改了一下相关的标签而已,所以对于开发者来说,掌握GridLayout还是很容易的事情。

GridLayout的布局策略简单分为以下三个部分:

首先它与LinearLayout布局一样,也分为水平和垂直两种方式,默认是水平布局,一个控件挨着一个控件从左到右依次排列,

但是通过指定android:columnCount设置列数的属性后,控件会自动换行进行排列。

另一方面,对于GridLayout布局中的子控件,默认按照wrap_content的方式设置其显示,这只需要在GridLayout布局中显式声明即可。

其次,若要指定某控件显示在固定的行或列,只需设置该子控件的android:layout_row和android:layout_column属性即可,

但是需要注意:android:layout_row=”0”表示从第一行开始,android:layout_column=”0”表示从第一列开始,如果需要设置某控件跨越多行或多列,只需将该子控件的android:layout_rowSpan或者layout_columnSpan属性设置为数值,

再设置其layout_gravity属性为fill即可,前一个设置表明该控件跨越的行数或列数,后一个设置表明该控件填满所跨越的整行或整列。

猜你喜欢

转载自blog.csdn.net/u014799068/article/details/50695451