Android中常见的几种布局的总结

众所周知,一个应用程序的良好与否,很大程度上取决于它的用户界面。这就像是一个人给人的第一感觉也是从脸开始的一样。一个应用程序首先展示给客户的就是它的界面,通途的说,也就是软件的脸面。只有良好的用户交互界面,才能在第一时间抓住客户心理,取得优势。那么今天我就来给大家说一下在Android程序的开发过程中,对于Android应用程序的一些常见的布局以及个人的一些看法,希望对大家有所帮助。

 

Android4.0之前一共有5种关于Android的布局,分别是:LinearLayout(线性布局),RelativeLayout(相对布局),FrameLayout(框架布局),AbsoluteLayout(绝对布局),TableLayout(表格布局)。在Android4.0之后又新增了一种布局,GirdLayout(网格布局)。其中常用的布局有LinearLayout(线性布局),RelativeLayout(相对布局)以及最新出的GirdLayout(网格布局)

 

首先介绍一下LinearLayout布局,也就是我们平时说的线性布局。顾名思义,所谓线性布局也就是在搭建Android界面时,界面元素的整体排列,呈水平排列(horizntal)或者是竖直排列(vertical)。在线性布局布局中,每一行或每一列只能放单独一个控件。线性布局不会换行。当控件排列到窗体边缘,后面的控件就被隐藏,而不会显示出来。线性布局通过orientation属性来控制元素的排列方式即它的两个值:horizntal,vertical。而且这个属性在布局中一般都是要加进去的,告诉系统你按照什么方式排列。如果不写的话,第一行代码可能会整体报错。

LinearLayout的常见的一些属性:

1.android:orientation    定义布局内控件或组件的排列方式

可选项:vertical horizontal

2.android:layout_width   定义控件的宽度

可选项:fill_parent/ match_parent/ wrap_content/绝对数值

备注:fill_parent/ match_parent的效果完全一致,都是填充整个父控件。但是自2.2版本开始推荐使用match_parent wrap_content指的是该控件的宽度正好包裹内容物。

3.android:layout_height   定义控件的高度

可选项:fill_parent/ match_parent/ wrap_content/绝对数值

备注:fill_parent/ match_parent的效果完全一致,都是高度填充整个父控件。wrap_content指的是该控件的高度正好包裹内容物。

4.android:id  设置控件的id。这样就可以在R.java中自动生成相应的值,在程序中通过findViewById就可以调用。

设置id的格式为:android:id= "@+id/id的名字"

 

5.android:background    设置控件的背景颜色或背景图片

例如:android:background="#ffffff"

         android:background="@drawable/图片名称"

 

LinearLayout特有的属性有以下几种:

1、android:orientation   布局管理器内组件的排列方式

2、android:gravity    设置布局管理器内组件的对齐方式

3、android:weightSum  为该布局下的元素设置权重

 

 LinearLayout 子元素的特有属性:

1、android:layout_weight   子元素在 LinearLayout 中所占的权重

2、android:layout_gravity    子元素在 LinearLayout 中的对齐方式(只在LinearLayout和FrameLayout中有效,LinearLayut中只有一个方向起作用,FrameLayou都有效)

 

 

 

接下来再说一下RelativeLayout,相对布局。相对布局在平时的开发中也经常用到。简单来说就是一个界面元素相对于另一个元素的位置。一般需要在定义一个元素时附上该元素的ID,然后另一个元素就可以相对于这个元素进行布局了。

RelativeLayout特有属性:

1、android:gravity    设置布局容器内子控件的对齐方式    

2、android:ignoreGravity   设置布局管理器内哪个控件不受gravity属性的影响

 

RelativeLayout子元素的特有属性:LayoutParams

       A、第一组:指兄弟控件之间的相对位置。该组属性的值是另一个控件的id。

  1. layout_toRightOf      该控件在哪个控件的右侧

  2. layout_toLeftOf        该控件在哪个控件的左侧

  3. layout_above           该控件在哪个控件的上侧

  4. layout_below                该控件在哪个控件的下侧

 B、第二组:指兄弟控件之间的对齐关系。该组属性的值是另一个控件的id。

  1. layout_alignRight      该控件与哪个控件的右对齐

  2. layout_alignLeft        该控件与哪个控件的左对齐

  3. layout_alignTop        该控件与哪个控件的顶对齐

  4. layout_alignBottom   该控件与哪个控件的底对齐

  5. layout_alignStart   该控件与哪个控件的起始端对齐(4.2新出的)

  6. layout_alignEnd    该控件与哪个控件的末端对齐(4.2新出的)

 C、第三组:指控件与父布局之间的对齐关系。该组属性的值是true或者false。

  1. layout_alignParentRight                   该控件与父布局控件的右对齐吗?

  2. layout_alignParentLeft                     该控件与父布局控件的左对齐吗?

  3. layout_alignParentTop                     该控件与父布局控件的顶端对齐吗?

  4. layout_alignParentBottom                该控件与父布局控件的底部对齐吗?

  5. layout_centerInParent                      该控件位于父布局控件的中心位置吗?

  6. layout_centerVertical                        该控件位于父布局控件的垂直中心位置吗?

  7. layout_centerHorizontal                    该控件位于父布局控件的水平中心位置吗?

现在市面上大部分的Android界面通过以上两种布局方式结合使用都可以达到美观大气的效果。接下来再说一下关于Android4.0以后新出的一种布局方式,叫做网格布局(GridLayout)。这类布局方式最典型的一个案例就是我们手机上都带有的计算器界面。当然使用LinearLayout和RelativeLayout也能完成,但是显然使用GridLayout会变得更加容易一点。使用GridLayout需要注意的一点是需要在布局界面的时候首先定义网格的行列数,通常使用的是rowCount和columnCount两个属性来定义网格的行数和列数。再者就是个别网格需要使用: layout_rowSpan 和layout_columnSpan来实现网格的跨行和跨列操作,通俗的说就是行和列的合并。

GridLayout子元素的属性:

1、android:layout_column

属性说明: 显示该控件的列。例如,android:layout_column="0",表示在第1列显示该控件;android:layout_column="1",表示在第2列显示该控件。

 

2、android:layout_row

属性说明: 该控件所在行。例如,android:layout_row="0",表示在第1行显示该控件;android:layout_row="1",表示在第2行显示该控件。它和 android:layout_column类似。

 

3、android:layout_columnSpan

属性说明: 列合并。即该控件所占的列数。例如,android:layout_columnSpan="2",表示该控件占2列。

 

4、android:layout_rowSpan

属性说明: 行合并。即该控件所占的行数。例如,android:layout_rowSpan="2",表示该控件占2行。

 

5、android:layout_gravity

属性说明:该控件的布局方式。选项值:

  • top                          -- 控件置于容器顶部,不改变控件的大小。

  • bottom                    -- 控件置于容器底部,不改变控件的大小。

  • left                         -- 控件置于容器左边,不改变控件的大小。

  • right                       -- 控件置于容器右边,不改变控件的大小。

  • center_vertical     -- 控件置于容器竖直方向中间,不改变控件的大小。

  • fill_vertical              -- 如果需要,则往竖直方向延伸该控件。

  • center_horizontal -- 控件置于容器水平方向中间,不改变控件的大小。

  • fill_horizontal      -- 如果需要,则往水平方向延伸该控件。

  • center                    -- 控件置于容器中间,不改变控件的大小。

  • fill                         -- 如果需要,则往水平、竖直方向延伸该控件。

  • clip_vertical        -- 垂直剪切,剪切的方向基于该控件的top/bottom布局属性。若该控件的gravity是竖直的:若它的gravity是top的话,则剪切该控件的底部;若该控件的gravity是bottom的,则剪切该控件的顶部。

  • clip_horizontal     -- 水平剪切,剪切的方向基于该控件的left/right布局属性。若该控件的gravity是水平的:若它的gravity是left的话,则剪切该控件的右边;若该控件的gravity是  right的,则剪切该控件的左边。

  • start                      -- 控件置于容器的起始处,不改变控件的大小。

  • end                       -- 控件置于容器的结束处,不改变控件的大小。

 

以上三种布局方式在实际应用开发中是比较常见的,另外的布局方式如FrameLayout(框架布局),AbsoluteLayout(绝对布局),TableLayout(表格布局)相对来说就要使用的少一些,在这里就不一一详述,有兴趣的同学可以在网上搜一下其他的一些布局方式,为Android的学习打下一个良好的基础。以上总结都是我在平时学习中一点一点总结的,可能会有问题,还希望有志趣相投的同学指正,共同进步!