Android 的布局管理器用于控制组件如何摆放。
常用的布局管理器RelativeLayout(相对布局管理器)、LinearLayout(线性布局管理器)、FrameLayout(帧布局管理器)、TableLayout(表格布局管理器)、AbsoluteLayout(绝对布局管理器)、GridLayout(网格布局管理器)。其中绝对布局管理器是根据组件的绝对位置进行布局,所以不利于屏幕自适应,在Android2.0就被标记过期。在Android4.0后提供了网格布局管理器。
RelativeLayout(相对布局管理器):
程序默认的布局管理器就是一个相对布局管理器,是一个基于一个参考点的布局管理器,在Android中的相对布局就是在一个参考点的上下左右四个方位进行布局。
其中gravity属性是设置组件摆放方式,ignoreGravity是控制某个组件不受gravity控制。这个属性是对布局管理器所设置的属性。
相对布局管理器还提供了一个内部类:RelativeLayout.LayoutParams,通过这个类提供了一些xml属性,可以很好的控制布局管理器中各组件的摆放。这些属性是对相对布局管理器中组件上所设置的属性。其中:
layout_above、layout_below、layout_toLeftOf、layout_toRightOf这四个属性是指定组件相对于参考组件位置的。
layout_alignParentBottom、layout_alignParentLeft、layout_alignParentRight、layout_alignParentTop这四个属性是用于设置组件与布局管理器哪边对齐。当设为true时即为哪边对齐。
layout_alignBottom、layout_alignLeft、layout_alignRight、layout_alignTop这四个属性是用于设置组件与哪个组件底、左、右、顶相对齐。
layout_centerHorizontal、layout_centerInparent、layout_centerVertical这三个属性是用于设置组件位于布局管理器的哪个位置。(水平居中、中间、垂直居中)
LinearLayout(线性布局管理器):
线性布局管理器是将放入的组件按照水平或者是垂直的方式进行放置。
orientation = "vertical"指定为垂直线性布局管理器
orientation = "horizontal"指定为水平线性布局管理器
在使用垂直线性布局时,每一行只能放置一个组件,组件一个挨一个的垂直排列,当组件排到窗体的边缘后,则剩下的组件不会被显示。水平线性布局同理。
LinearLayout布局管理器主要有俩个属性:orientation、gravity
orientation属性上面介绍过了,设置垂直或者是水平布局。gravity属性和上面RelativeLayout布局的gravity属性一样,是用于控制布局管理器内组件的显示位置。
组件的属性:
layout_weight属性,用于设置组件所占的权重,也就是组件占父容器剩余空间的比例,默认值为0,即父容器剩余多大就占多大。当设置的值大于0时,那么每个组件将对父容器的剩余空间进行分割,分割的大小取决于每个组件设置的layout_weight属性的值。
FrameLayout(帧布局管理器):
帧布局管理器是为每一个放入的组件创建一个空白的区域,这些组件按照先后顺序层叠放置,后面的组件会覆盖前面的组件。通常用于显示层叠的内容,并且可以实现拖动的动画效果。
主要有foreground和foregroundGravity俩个布局的属性。
foreground:用于为当前帧布局管理器设置一个前景图像
foregroundGravity:用于设置前景图像的位置
前景图像就是一个始终位于最上层的图像,其它的组件不能将其覆盖。通常是一个图片资源。前景图像默认的位置会覆盖在整个屏幕的上方。通过foregroundGravity属性对位置进行设置,这个前景图像就会按本身的大小进行显示。
TableLayout(表格布局管理器):
表格布局管理器是以行列的方式来管理放入布局的组件。
可以通过TableRow标记来增加表格行,添加多个则增加多行,这个标记本身也是一个容器,所以可以在这个标记中添加其他的组件。在表格布局管理器中,没有表格列的标记,所以每添加一个组件就占一列。
布局的属性:
collapseColumns:用于设置哪一列隐藏,列序号是从0开始。可以设置隐藏多列,列序号之间使用逗号隔开。
stretchColumns:用于设置哪一列可以被拉伸,列序号从0开始。可以设置拉伸多列,列序号之间使用逗号隔开。
shrinkColumns: 用于设置哪一列可以被收缩,列序号从0开始。可以设置收缩多列,列序号之间使用逗号隔开。
AbsoluteLayout(绝对布局管理器):
绝对布局管理器在Android2.0后被标记过期,所以在这里就不做介绍。
GridLayout(网格布局管理器):
网格布局管理器是Android4.0版本推出的,在网格布局管理器中,屏幕被虚拟的细线划分成行列单元格,每个单元格放置一个组件。网格布局管理器比表格布局管理器更加灵活,放置在单元格中的组件可以跨行或者跨列显示。而且网格布局管理器在一行占满后,超出容器的组件会自动换行,表格布局管理器则不会显示。
布局的主要属性:
columnCount:用于指定网格的最大列数。
orientation:用于指定当没有对放入其中的组件分配行和列的时候,这些组件的排列方式。
rowCount:用于指定网格的最大行数。
提供了一个GridLayout.LayoutParams内部类,这个类提供了xml一些属性,通过这些属性可以控制网格布局管理器中各子组件的分布。
layout_column:用于指定子组件位于网格的第几列。
layout_row:用于指定子组件位于网格的第几行。
layout_columnSpan:用于指定子组件横向跨几列。
layout_rowSpan:用于指定子组件纵向跨几行。
layout_columnWeight:用于指定子组件在水平方向上的权重。
layout_rowWeight:用于指定子组件在垂直方向上的权重。
layout_gravity:用于设置子组件采用什么方式占据网格空间。
布局管理器的嵌套:
根布局管理器必须包含xmlns属性;
在一个布局文件中,最多只能有一个根布局管理器,如果需要有多个,则还需要使用一个跟布局管理器将它们括起来;
不能嵌套太深,如果嵌套太深,则会影响性能。主要体现在页面加载速度慢。