为了更好的管理android应用的用户界面里的各组件,android提供了布局管理器,通过使用布局管理器,android应用的图形用户界面具有良好的平台无关性。android布局管理器可以根据运行平台来调整组件的大小,而程序员要做的只是为容器选择合适的布局管理器。
与Swing界面编程不同的是,android布局管理器本身就是一个UI组件,所有的布局管理器就是ViewGroup的子类。
线性布局:
线性布局是由LinearLayout类来代表,线性布局有些像Swing编程中的Box,他们都会将容器中的组件一个挨一个的排列起来。LinearLayout可以控制各个组件横向排列(通过设置android:orientation属性控制),也可以控制各组件纵向排列。
我们可以通过设置android:orientation="horizontal"来设置线性布局的方向改为水平,也可是设置android:orientation="vertical"来设置线性布局的方向改为垂直
android的线性布局不会换行,当组件一个挨一个的排列到头之后,剩下的组件将不会被显示出来。
表格布局:
线性布局是由TableLayout类来代表,TableLayout继承了LinearLayout,因此它的本质依然是线性布局管理器。表格布局采用行、列形式来管理UI组件,TableLayout并不需要明确的声明包含多少行多少列,而是通过添加TableRow、其他组件来控制表格的行数和列数。
每次向TableLayout中添加一个TableRow,该TableRow就是一个表格行,TableRow也是容器,因此它可以不断地添加其他组件,每添加一个子组件该表格就增加一列。
帧布局:
帧布局由FrameLayout代表,FrameLayout直接继承了ViewGroup组件。
帧布局容器为每个加入其中的组件创建一个空白的区域(称为一帧),每个子组件占据一帧,这些帧都会根据gravity属性执行自动对齐。帧布局的效果类似于AWT编程里边的CardLayout,都是把组件一个一个的叠加在一起。与CardLayout的区别在于,CardLayout可以将下面的Card移上来,但FrameLayout则没有提供相应的方法。
相对布局:
相对布局由RelativeLayout所代表,相对布局容器内子组件的位置总是相对兄弟组件、父容器所决定的,因此这种布局方式被称为相对布局。
例如:A组建的位置是由B组建的位置所决定的,Android要求先定义B组件,在定义A组件。
为了控制该布局容器中各个子组件的布局分布,RelativeLayout提供了一个内部类:RelativeLayout.layoutParams,该类提供了大量的XML属性来控制RelativeLayout布局管理中的子组件布局分布。
除此之外RelativeLayout.layoutParams还继承了android.view.ViewGroup.MarginLayoutParams,因此RelativeLayout布局容器中每个子组件也可指定android.view.ViewGroup.MarginLayoutParams所支持的各XML属性。
绝对布局:
绝对布局由AbsoluteLayout所代表。绝对布局就像AWT编程中的空布局,android不提供任何布局控制,而是由开发人员自己通过X坐标,Y坐标来控制组件的位置。当使用AbsoluteLayout作为布局容器时,布局容器不再管理子组件的位置、大小,这些都由开发人员自己控制。
与Swing界面编程不同的是,android布局管理器本身就是一个UI组件,所有的布局管理器就是ViewGroup的子类。
线性布局:
线性布局是由LinearLayout类来代表,线性布局有些像Swing编程中的Box,他们都会将容器中的组件一个挨一个的排列起来。LinearLayout可以控制各个组件横向排列(通过设置android:orientation属性控制),也可以控制各组件纵向排列。
我们可以通过设置android:orientation="horizontal"来设置线性布局的方向改为水平,也可是设置android:orientation="vertical"来设置线性布局的方向改为垂直
android的线性布局不会换行,当组件一个挨一个的排列到头之后,剩下的组件将不会被显示出来。
表格布局:
线性布局是由TableLayout类来代表,TableLayout继承了LinearLayout,因此它的本质依然是线性布局管理器。表格布局采用行、列形式来管理UI组件,TableLayout并不需要明确的声明包含多少行多少列,而是通过添加TableRow、其他组件来控制表格的行数和列数。
每次向TableLayout中添加一个TableRow,该TableRow就是一个表格行,TableRow也是容器,因此它可以不断地添加其他组件,每添加一个子组件该表格就增加一列。
帧布局:
帧布局由FrameLayout代表,FrameLayout直接继承了ViewGroup组件。
帧布局容器为每个加入其中的组件创建一个空白的区域(称为一帧),每个子组件占据一帧,这些帧都会根据gravity属性执行自动对齐。帧布局的效果类似于AWT编程里边的CardLayout,都是把组件一个一个的叠加在一起。与CardLayout的区别在于,CardLayout可以将下面的Card移上来,但FrameLayout则没有提供相应的方法。
相对布局:
相对布局由RelativeLayout所代表,相对布局容器内子组件的位置总是相对兄弟组件、父容器所决定的,因此这种布局方式被称为相对布局。
例如:A组建的位置是由B组建的位置所决定的,Android要求先定义B组件,在定义A组件。
为了控制该布局容器中各个子组件的布局分布,RelativeLayout提供了一个内部类:RelativeLayout.layoutParams,该类提供了大量的XML属性来控制RelativeLayout布局管理中的子组件布局分布。
除此之外RelativeLayout.layoutParams还继承了android.view.ViewGroup.MarginLayoutParams,因此RelativeLayout布局容器中每个子组件也可指定android.view.ViewGroup.MarginLayoutParams所支持的各XML属性。
绝对布局:
绝对布局由AbsoluteLayout所代表。绝对布局就像AWT编程中的空布局,android不提供任何布局控制,而是由开发人员自己通过X坐标,Y坐标来控制组件的位置。当使用AbsoluteLayout作为布局容器时,布局容器不再管理子组件的位置、大小,这些都由开发人员自己控制。