当前位置: 代码迷 >> Android >> Android学习05-格局管理器
  详细解决方案

Android学习05-格局管理器

热度:52   发布时间:2016-05-01 19:53:27.0
Android学习05-----布局管理器

?

?

为了更好的管理Android应用的用户界面里的个组件,Android提供了布局管理器,通过布局管理器,Android应用的图形用户界面具有良好的平台无关性。这里什么叫平台的无关性呢?就是说不同手机。我们知道不同手机它们的屏幕的分辨率、尺寸并不完全相同,而Android的布局管理器可以根据运行平台来调整组件的大小,而我们所需要做的就是选择合适的布局管理器。

与Swing编程不同的是,Android的布局管理器本身就是一个UI组件,所有的布局管理器都是ViewGroup的子类:

?

?

?

我们从上图也可以发现,所有布局都可作为容器类使用,因此可以调用多个重载的addView()向布局管理器中添加组件,当然我们也可以用一个布局管理器嵌套其他布局管理器。

?

一、线性布局

?????? 线性布局是由LinearLayout类来代表的,线性布局有点像AWT编程里的FlowLayout,它们都会将容器里的组件一个挨着一个排列起来,LinearLayout不仅可以控制各组件横向排列,也可以控制纵向排列(android:orientation="vertical"控制);

?????? 线性布局与AWTFlowLayout的组大区别在于:Android的线性布局不会换行,当组件一个挨着一个排到头了,剩下的组件将不会被显示出来。在AwtFlowLayout则会另起一行排列多出来的组件。

LinearLayout的常用XML属性及相关方法

XML属性

相关方法

说明

Android:gravity

setGravity(int)

设置布局管理器内组件对齐方式,该属性支持topbuttomleftcenter_vertical、等等,可以同时指定多种对齐方式,多个属性值用竖线隔开,竖线前后不能有空格

android:orientation

setOrientation(int)

设置布局管理器内组件的排列方式,vertical:垂直,默认horizontal:水平

?

二、表格布局

?????? 表格布局由TableLayout所代表,表格布局采用行列的形式管理UI组件,TableLayout并不需要明确的声明包含多少行、多少列,而是通过添加TableRow、其他组件来控制表格的行数和列数。

?????? 每次向TableLayout中添加一个TableRow,该TableRow就是一个表格行,TableRow也是容器,因此它也可以不断地添加其他组件,每添加一个子组件该表格就增加一列。

如果直接向TableLayout中添加组件,那么这个组件将直接占用一行。

在表格布局中,列的宽度由该列中最宽的那个单元格决定,整个表格布局的宽度则取决与父容器的宽度(默认总是占满父容器本身)

?????? 在表格布局管理器中,可以为单元格设置如下三种行为方式:

????????????? Shrinkable:如果某个列被设为Shrinkable,那么该列的所有单元格的宽度可以被收缩,以保证表格能适应父容器的宽度。

????????????? Stretchable:如果某个列被设为Stretchable,那么该列的所有单元格的宽度可以被拉伸,以保证组件能完全填满表格空余空间。

????????????? Collapsed:如果某个列被设为Collapsed,那么该列的所有单元格会被隐藏;

??? TableLayout继承了LinearLaout,因此它完全可以支持LinearLayout所支持的全部XML属性,除此之外,TableLayout还支持如下表所示的XML属性。

Tab1eLayout的常用XML属性及相关方法:

XML属性

相关方法

说明

android:collapseColumns

setColumnCollapsed(int,boolean)

设置需要被隐藏的列的列序号,多个列序号之间用逗号隔开

android:shrinkColumns

setShrinkAllColumns(boolean)

设置允许被收缩的列的列序号,多个列序号之间用逗号隔开

android:stretchColumns

setStretchAllColumns(boolean)

设置允许被拉伸的列的列序号,多个列序号之间用逗号隔开

?

三、帧布局

帧布局山FrameLayout所代表,FrameLayout直接继承了ViewCroup组件。

帧布局容器为每个加入其中的组件创建一个空白的区域〔称为一帧),所有每个子组件占据一帧,这些帧都会根据gravity属性执行自动对齐。也就是说,帧布局的效果有点类似于AWT编程的CardLayout,都是把组件一个一个地叠加在一起。与CardLayout的区别在于,CardLayout可以将下面的Card移上来,但FrameLayout则没有提供相应的方法.

FrameLayout的常用XML属性及相关方法

XML属性

相关方法

说明

android:foreground

setForeground(Drawable)

设置该帧布局容器的前景图像

android:foregroundGravity

setForegroundGravity(int)

定义绘制前景图像的gravity属性

android:measureAllChildren

setMeasureAllChildren(boolean)

Determines whether to measure all children or just those in the VISIBLE or INVISIBLE state when measuring.

?

四、相对布局

相对布局由RelativeLayout代表,相对布局容器内子组件的位置总是相对兄弟组件、父容器来决定的,因此这种布局方式被称为相对布局。

??? 如果A组件的位置是由B组件的位置来决定的,Android要求先定义B组件,再定义A组件。

RelativeLayout的常用XML属性及相关方法

XML属性

相关方法

说明

android:gravity

setGravity(int)

设置该布局弃器内部各子组件的对齐方式

android:ignoreGravity

setIgnoreGravity(int)

设置哪个组件不受gravity组件的影响

为了控制该布局容器中各子组件的布局分布,RelativeLayout提供了一个内部类:

RelativeLayout.LayoutParams,该类提供了大量的XML属性来控制RelativeLayout布局容器中子组件的布局分布。

?

五、绝对布局

?????? 绝对布局由AbsoluteLayout代表。绝对布局就像Java AWT编程中的空布局,就是Android不提供任何布局控制,而是由开发人员自己通过X坐标、Y坐标来控制组件的位置。当使用AbsoluteLayout作为布局容器时,布局容器不再管理子组件的位置、大小—这些都需要开发人员自己控制。

使用绝对布局时,每个子组件都可指定如下两个XML属性。

????????????? layout_x:指定该子组件的X坐标。

????????????? layout_y:指定该子组件的Y坐标

?

?

  相关解决方案