Android 界面布局

jopen 10年前

种类:

LinearLayout(线性布局)

TableLayout(表格布局)
FrameLayout(框架布局)
RalativeLayout(相对布局)

AbsoluteLayout(绝对布局)

GridLayout(网格布局)


布局文件中常用的属性:

LinearLayout(线性布局):

在线性布局中,所有的子元素都在垂直或水平方向按照顺序在界面上排列,如果垂直排列,则每行仅包括一个界面元素;同样,如果水平排列,则每列仅包含一个界面元素。

         orientation     设置linearlayout的排列方式(垂直排列和水平排列)

         android:id    为控件指定一个id

         android:layout_width  设置该控件的宽度

         android:layout_height   设置该控件的高度

         android:background  为该控件设置背景(可使用图片,也可用颜色)

         android:gravity  设置控件中内容的位置

         layout_gravity     设置该控件在父控件中的位置

         layout_margin     设置控件的外边距

         padding           设置控件的内边距

         android:text   为指定控件设置文字,使其显示在该控件中

android:textSize   设置该控件中文字的大小

                

RalativeLayout(相对布局):

相对布局是一种非常灵活的布局方式。能够通过指定界面元素与其他元素的相对位置关系,确定界面中所有元素的布局位置。

第一类 : 属性值为 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

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

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

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

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



TableLayout(表格布局):(这个要和TableRow配合使用,很像html里面的table)

这个表格布局不像HTML中的表格那样灵活,只能通过 TableRow 属性来控制它的行而列的话里面有几个控件就是几列(一般情况) 如:表示两行两列的一个表格。

<TableLayout>

<TableRow>

<EditText></EditText>

<EditText></EditText>

</TableRow>

<TableRow>

 <EditText></EditText>

<EditText></EditText>

</TableRow>

</TableLayout>

android:gravity="center" 书面解释是权重比。其时就是让它居中显示。

android:stretchColumns="1,2,3,4它的意思就是自动拉伸1,2,3,4列。


它还可以动态添加里面的每行每列。如下代码所示:

/*根据id查找表格对象*/

TableLayout tableLayout = (TableLayout) findViewById(R.id.table01);

/*创建列对象*/

TableRow tableRow = new TableRow(this);

/*文本框对象*/

TextView temp = new TextView(this);

temp.setText("text的值");

/*将此文本添加到列中*/

tableRow.addView(temp);


FrameLayout(框架布局):

里面可以放多个控件,不过控件的位置都是相对位置,在它里面的控件都是按后面的一个控件叠加在前一个控件上来显示的,所有元素都被放置在最左上角。


GridLayout(网格布局):

网格布局是AndroidSDK4.0新支持的布局方式,将用户界面划分为网格,界面元素可随意摆放在这些网中。网格布局比表格布局在界面设计上更加灵活,在网格布局中,界面元素可占用多个网格,这是表格布局无法实现的。

        useDefaultMargins  如果值为真,则布局中的各个元素间都会留有一定的边界空间

        columnCount   设置界面被分割的列的数量

        rowCount    设置界面被分割的行的数量

        layout_column  设置该控件位于网格中第几列

        layout_row      设置该控件位于网格中第几行

        layout_columnSpan设置该控件在网格中列的跨度

        layout_rowSpan   设置该控件在网格中行的跨度


AbsoluteLayout(绝对布局):

又可以叫做坐标布局,可以直接指定子元素的绝对位置这种布局简单直接,直观性强使用android:layout_x属性来确定X坐标,以左上角为顶点。使用android:layout_y属性确定Y坐标,以左上角为顶点。如果子元素不设置layout_x和layout_y,那么它们的默认值是0,会出现在左上角。由于手机屏幕尺寸差别比较大,使用绝对定位的适应性会比较差,不推荐使用.


总结:(LinearLayout 和 RelativeLayout 应该又是其中用的较多的两种。AbsoluteLayout 比较少用,因为它是按屏幕的绝对位置来布局的如果屏幕大小发生改变的话控件的位置也发生了改变。这个就相当于HTML中的绝对布局一样,一般不推荐使用 )  

注意事项:

1 、各布局不要乱用各自的属性。比如把属于 AbsoluteLayout 布局的android:layout_x和android:layout_y用到 LinearLayout 布局或 RelativeLayout 布局,或者把 RelativeLayout 布局的 below , rightof 等属性应用到其他布局中。这样做虽然不会报错,但这是白浪费感情的工作,根本达不到我们需要的效果。

2 、关于android:layout_width="fill_parent" 和 android:layout_height="wrap_content" ,这是对每个布局宽和高的设置。 wrap_content 可表示随着其中控件的不同而改变这个布局的宽度或高度,类似于自动设置宽和高, fill_parent使布局填充整个屏幕,另外还有一种 match_parent ,它本质上和 fill_parent 一样,并从 API  Level8 开始替代fill_parent 。