Layout布局相关笔记

来源:互联网 发布:黑金ps知乎 编辑:程序博客网 时间:2024/06/10 18:08

如何使用布局资源文件

在代码中创建每个Activity时,在onCreate()方法中,调用setContentView()加载指定的Layout布局文件即可。
然后就可以通过findViewById()或者注解的方式来获得在布局文件中创建的相应id的控件。
public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        button1 = (Button) findViewById(R.id.button1);    }

布局方式

有过其他GUI编程经验的就很容易理解了。

LinearLayout线性布局

线性布局是按照水平或垂直的顺序将子元素 (可以是控件或布局) 依次按照顺序排列,每一个元素都位于前面一个元素之后。线性布局分为两种:水平方向和垂直方向的布局。分别通过属性 android:orientation="vertical" 和 android:orientation="horizontal" 来设置。
通过android:layout_weight设置子元素占据的空间大小的比例。

TableLayout 表格布局

表格布局适用于多行多列的布局格式,每个TableLayout由多个TableRow组成,
一个 ableRow就表示TableLayout中的每一行,这一行可以由多个子元素组成。实际上 TableLayout和TableRow都是LineLayout线性布局的子类。但是TableRow的参数 android:orientation属性值固定为horizontal,且android:layout_width=MATCH_PARENT,android:layout_height=WRAP_CONTENT。所以 TableRow 实际是一个横向的线性布局,且所以子元素宽度和高度一致。
注意:在 TableLayout 中,单元格可以为空,但是不能跨列,意思是只能不能有相邻的单元格为空。
在TableLayout布局中,一列的宽度由该列中最宽的那个单元格指定,而该表格的宽度由父容器指定。可以为每一列设置以下属性:
Shrinkable  表示该列的宽度可以进行收缩,以使表格能够适应父容器的大小
Stretchable 表示该列的宽度可以进行拉伸,以使能够填满表格中的空闲空间
Collapsed  表示该列会被隐藏
TableLayout 中的特有属性:
android:collapseColumns
android:shrinkColumns
android:stretchColumns = "0,1,2,3"// 表示产生 4 个可拉伸的列

RelativeLayout 相对布局

最常用的布局。
RelativeLayout继承于android.widget.ViewGroup,其按照子元素之间的位置关系完成布局的,作为 Android 系统五大布局中最灵活也是最常用的一种布局方式,非常适合于一些比较复杂的界面设计。
注意:在引用其他子元素之前,引用的 ID 必须已经存在,否则将出现异常。
常用的位置属性:
android:layout_toLeftOf         该组件位于引用组件的左方 
android:layout_toRightOf        该组件位于引用组件的右方 
android:layout_above            该组件位于引用组件的上方 
android:layout_below                该组件位于引用组件的下方 
android:layout_alignParentLeft      该组件是否对齐父组件的左端 
android:layout_alignParentRight     该组件是否齐其父组件的右端 
android:layout_alignParentTop       该组件是否对齐父组件的顶部 
android:layout_alignParentBottom    该组件是否对齐父组件的底部 
android:layout_centerInParent       该组件是否相对于父组件居中 
android:layout_centerHorizontal     该组件是否横向居中 
android:layout_centerVertical       该组件是否垂直居中
 

FrameLayout 框架布局

将所有的子元素放在整个界面的左上角,后面的子元素直接覆盖前面的子元素,使用较少,启动页面、视频暂停图标,操作指导等。

AbsoluteLayou 绝对布局(应该算是淘汰了)

将所有的子元素通过设置 android:layout_x 和 android:layout_y 属性,将坐标位置固定下来,即坐标 (android:layout_x, android:layout_y) ,layout_x 用来表示横坐标,layout_y 用来表示纵坐标。屏幕左上角为坐标 (0,0),横向往右为正方,纵向往下为正方。实际应用中使用较少,因为Android终端机型比较多各种屏幕大小,分辨率也不一样,如果用绝对布局,可能导致在有的终端上显示不等。

GridLayout 网格布局(Android4.0以后推出)

GridLayout 布局使用虚细线将布局划分为行、列和单元格,也支持一个控件在行、列上都有交错排列。与LinearLayout布局一样,也分为水平和垂直两种方式,默认是水平布局,一个控件挨着一个控件从左到右依次排列,但是通过指定 android:columnCount 设置列数的属性后,控件会自动换行进行排列。另一方面,对于 GridLayout 布局中的子控件,默认按照wrap_content 的方式设置其显示,这只需要在 GridLayout 布局中显式声明即可。若要指定某控件显示在固定的行或列,只需设置该子控件的 android:layout_row 和 android:layout_column 属性即可,但是需要注意:android:layout_row=”0”表示从第一行开始,android:layout_column=”0”表示从第一列开始,这与编程语言中一维数组的赋值情况类似。
如果需要设置某控件跨越多行或多列,只需将该子控件的 android:layout_rowSpan 或者 layout_columnSpan 属性设置为数值,再设置其layout_gravity属性为fill即可,前一个设置表明该控件跨越的行数或列数,后一个设置表明该控件填满所跨越的整行或整列。

注:
不同和相同Layout布局之间可以互相嵌套。

常用布局的属性:

(1)layout_margin
用于设置控件边缘相对于父控件的边距
android:layout_marginLeft
android:layout_marginRight
android:layout_marginTop
android:layout_marginBottom

(2) layout_padding
用于设置控件内容相对于控件边缘的边距
android:layout_paddingLeft
android:layout_paddingRight
android:layout_paddingTop
android:layout_paddingBottom

(3) layout_width/height
用于设置控件的高度和宽度
wrap_content 内容包裹,表示这个控件的里面文字大小填充
fill_parent  跟随父窗口
match_parent

(4) gravity
用于设置 View 组件里面内容的对齐方式
top bottom  left   right   center 等

(5) android:layout_gravity 
用于设置 Container 组件的对齐方式
android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐

0 0
原创粉丝点击