您的位置:首页 > 移动开发 > Android开发

Android 的布局文件的介绍和每个属性的详解

2015-06-05 15:21 405 查看
Android布局是应用界面开发的重要一环,在Android中,共有五种布局方式,分别是:FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局).

一、FrameLayout

这个布局可以看成是墙脚堆东西,有一个四方的矩形的左上角墙脚,我们放了第一个东西,要再放一个,那就在放在原来放的位置的上面,这样依次的放,会盖住原来的东西。这个布局比较简单,也只能放一点比较简单的东西。

二、LinearLayout

线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下罗列在屏幕上。每一个LinearLayout里面又可分为垂直布局(android:orientation=”vertical”)和水平布局(android:orientation=”horizontal” )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。

linearLayout中有一个重要的属性 android:layout_weight=”1”,这个weight在垂直布局时,代表行距;水平的时候代表列宽;weight值越大就越大。

三、AbsoluteLayout

绝对布局犹如div指定了absolute属性,用X,Y坐标来指定元素的位置android:layout_x=”20px” android:layout_y=”12px” 这种布局方式也比较简单,但是在垂直随便切换时,往往会出问题,而且多个元素的时候,计算比较麻烦。

四、RelativeLayout

相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有:

相对于某一个元素

android:layout_below="@id/aaa" 该元素在 id为aaa的下面
android:layout_toLeftOf="@id/bbb" 改元素的左边是bbb


相对于父元素的地方

android:layout_alignParentLeft="true"  在父元素左对齐
android:layout_alignParentRight="true" 在父元素右对齐


还可以指定边距等,具体详见API

五.TableLayout

表格布局类似Html里面的Table。每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素,设定他的对齐方式 android:gravity=”” 。

TableLayout常用属性:

android:collapseColumns:将TableLayout里面指定的列隐藏,若有多列需要隐藏,请用逗号将需要隐藏的列序号隔开。
  android:stretchColumns:设置指定的列为可伸展的列,以填满剩下的多余空白空间,若有多列需要设置为可伸展,请用逗号将需要伸展的列序号隔开。
  android:shrinkColumns:设置指定的列为可收缩的列。当可收缩的列太宽(内容过多)不会被挤出屏幕。当需要设置多列为可收缩时,将列序号用逗号隔开。
列元素(Button)属性:(奇怪的是button 里面没有android:layout_column 和android:layout_span两个属性,写进去无反应,还不知道为什么)
  android:layout_colum:设置该控件在TableRow中指定的列。
  android:layout_span:设置该控件所跨越的列数。


在安卓4.0以后,又推出了一种新的布局方式GridLayout。感觉越来越像Swing了。哈哈。

至于有了TableLayout又搞个GridLayout的原因,简单试了下TableLayout,我认为至少有下面两个原因

1.不能同时向水平和垂直方向做控件的对齐

TableLayout继承了LinearLayout,因此只能向一个方向做控件的对齐。

2.不能跨行跨列

因为TableLayout,不明确指定包含多少行,多少列,而是通过向TableRow里面添加其他组件,每添加一个组件该表格就增加一列。

如果向TableLayout里面添加组件,那么该组件就直接占用一行。所以这种方式造成控件不能跨行跨列。

而GridLayout,则用columnCount设置列数后,增加的控件在超过列数后自动换行进行排列。

简单汇总下TableLayout的特点:

Shrinkable : 该列的宽度可以进行收缩,以使表格能够适应父容器的大小

Stretchable : 该列可以进行拉伸,以填满表格中空闲的空间

Collapsed : 该列将会被隐藏

GridLayout的特点:

android:layout_row : 固定显示在第几行。

android:layout_column : 固定显示在第几列,前面几列没控件的话就空着。

android:layout_rowSpan : 跨几行

android:layout_columnSpan: 跨几列

每一个布局都有自己适合的方式,另外,这五个布局元素可以相互嵌套应用,做出美观的界面。

各种Layout用到的一些重要的属性:

  第一类:属性值为true或false

   android:layout_centerHrizontal 水平居中

  android:layout_centerVertical 垂直居中

  android:layout_centerInparent 相对于父元素完全居中

  android:layout_alignParentBottom 贴紧父元素的下边缘

  android:layout_alignParentLeft 贴紧父元素的左边缘

  android:layout_alignParentRight 贴紧父元素的右边缘

  android:layout_alignParentTop 贴紧父元素的上边缘

  android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物


  第二类:属性值必须为id的引用名“@id/id-name”

 android:layout_below 在某元素的下方

  android:layout_above 在某元素的的上方

  android:layout_toLeftOf 在某元素的左边

  android:layout_toRightOf 在某元素的右边

  android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐

  android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐

  android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐

  android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐


  第三类:属性值为具体的像素值,如30dip,40px (建议用dip)

android:layout_marginBottom 离某元素底边缘的距离

  android:layout_marginLeft 离某元素左边缘的距离

  android:layout_marginRight 离某元素右边缘的距离

  android:layout_marginTop 离某元素上边缘的距离


其他布局用到的属性补充

android:gravity 

android:gravity属性是对该view 内容的限定.比如一个button 上面的text. 你可以设置该text 在view的靠左,靠右等位置.以button为例,android:gravity=”right”则button上面的文字靠右

android:layout_gravity

android:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为例,android:layout_gravity=”right”则button靠右

android:layout_alignParentRight

使当前控件的右端和父控件的右端对齐。这里属性值只能为true或false,默认false。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: