Android 界面布局
种类:
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 ”
第三类:属性值为具体的像素值,如 30dip , 40pxandroid:layout_below 在某元素的下方
android:layout_above 在某元素的上方
android:layout_toLeftOf 在某元素的左边
android:layout_toRightOf 在某元素的右边
android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐
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 。