问题提出
在android开发中,一个好的程序,除了强大的功能以外,还要有一个能吸引别人眼球的界面。纵观当下流行的诸多Android软件,那些绚丽多彩,美轮美奂的程序界面与手触屏完美结合,给我们带来了不一般的用户体验,也把我们带进了梦幻般的Android世界。那么,如何开发出这些界面,让我们的Android软件在众多同类软件中脱颖而出呢?
问题分析
在android开发中,用于界面布局的控件主要在Layouts分类中,常用的有线性布局控件LinearLayout、相对布局控件RelativeLayout、框架布局控件FrameLayout、表格布局控件TableLayout等。本文将简要介绍下这几个布局控件,并通过一个实例演示这些控件的使用。
问题解决
在Eclipse中,界面布局有两种方式,我们可以在Graphical Layout中直接将控件拖入可视化界面,并在Property中对各种属性进行设置。也可以直接编辑我们的xml文件,用代码进行布局。如图:
简单地说,界面布局主要就是做两件事情,一个是安排控件顺序,另一个就是设置控件属性。控件的属性有很多,且不同控件的属性既有共性也有个性,当然常用的并不多。
- 三个基本属性
这三个基本属性分别是id、layout_width、layout_height
id不多说,就是控件的编号,最好是一个控件一个编号以免引用时出现二义性;layout_ width: 控件的宽度;layout_ height: 控件的高度。
layout_width和layout_height,都有三个既定值,即”fill_parent”、”match_parent”、” wrap_content”。前两者含义相同,只是说法不同,如果你的程序需要兼容低版本(2.1以下)Android系统,那就使用”fill_parent”,其含义就是与装载自己的容器相同,即容器有多大空间,控件就占据多大的空间,最大的parent就是手机屏幕。而最后一个” wrap_content”,就是控件内容有多大,控件就有多大。
除了这三个既定值外,我们还可以用数值任意指定控件大小,但必须有单位。
单位符号 |
单位名称 |
备注 |
mm |
毫米 |
与日常生活中我们说的毫米一样,物理意义 |
in |
英寸 |
与日常生活中我们说的英寸一样,物理意义 |
pt |
点 |
1pt=1/72英寸,物理意义 |
px |
像素 |
即屏幕的实际像素 |
dp |
设备独立像素 |
使显示的大小与屏幕密度无关,推荐使用 |
sp |
放大像素 |
与dp类似,主要用于文字的显示 |
以一个Button的layout_ width属性为例,xml代码如下:
01 |
<? xml version = "1.0" encoding = "utf-8" ?> |
02 |
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" |
03 |
android:layout_width = "fill_parent" |
04 |
android:layout_height = "fill_parent" |
05 |
android:orientation = "vertical" > |
07 |
android:id = "@+id/button1" |
08 |
android:layout_width = "wrap_content" |
09 |
android:layout_height = "wrap_content" |
10 |
android:text = "宽度:wrap_content" /> |
12 |
android:id = "@+id/button3" |
13 |
android:layout_width = "200dp" |
14 |
android:layout_height = "wrap_content" |
15 |
android:text = "宽度:200dp" /> |
17 |
android:id = "@+id/button2" |
18 |
android:layout_width = "match_parent" |
19 |
android:layout_height = "wrap_content" |
20 |
android:text = "宽度:match_parent" /> |
效果如图:
2.线性布局控件LinearLayout
2.1 属性orientation
LinearLayout是布局中最基本的控件,也是最常用的布局控件。它有两种,一种是水平布置(horizontal);另一种是垂直布置(vertical),通过属性orientation来设置,水平布局时只有一行可以有若干列;垂直布局时只有一列,可以有若干行。
2.2属性gravity
android:gravity属性用来控制放置在本LinearLayout内的控件的对齐方式
android:layout_gravity属性是本LinearLayout控件相对于父容器的对齐方式
1.3 属性layout_weight
android:layout_weight是一个重要的属性,也是一个麻烦的属性,用的好可以让布局更加合理、紧凑。用的不好会使布局显得十分别扭。这个属性的字面意思是“权重”,就是一个比例系数,即表示控件在父容器中所占的空间比例。系数越大,占的比例越大,默认值为0;如果父容器中的各个子控件的android:layout_weight值相等,那么他们将均分父容器空间。
LinearLayout可以嵌套,也可以放置其他布局控件。下面我们在一个垂直的LinearLayout嵌套入两个水平的LinearLayout、若干Button和TextView。
Xml代码如下:
01 |
<? xml version = "1.0" encoding = "utf-8" ?> |
02 |
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" |
03 |
android:layout_width = "fill_parent" |
04 |
android:layout_height = "fill_parent" |
05 |
android:orientation = "vertical" > |
07 |
android:id = "@+id/textView1" |
08 |
android:layout_width = "wrap_content" |
09 |
android:layout_height = "wrap_content" |
10 |
android:text = "水平布置-layout_weight不相等" |
11 |
android:textAppearance = "?android:attr/textAppearanceLarge" /> |
13 |
android:id = "@+id/linearLayout1" |
14 |
android:layout_width = "match_parent" |
15 |
android:layout_height = "wrap_content" |
16 |
android:orientation = "horizontal" > |
18 |
android:id = "@+id/button1" |
19 |
android:layout_width = "wrap_content" |
20 |
android:layout_height = "wrap_content" |
22 |
android:layout_weight = "1" /> |
24 |
android:id = "@+id/button2" |
25 |
android:layout_width = "wrap_content" |
26 |
android:layout_height = "wrap_content" |
28 |
android:layout_weight = "4" /> |
30 |
android:id = "@+id/button3" |
31 |
android:layout_width = "wrap_content" |
32 |
android:layout_height = "wrap_content" |
34 |
android:layout_weight = "15" /> |
38 |
android:id = "@+id/textView2" |
39 |
android:layout_width = "wrap_content" |
40 |
android:layout_height = "wrap_content" |
41 |
android:text = "水平布置-gravity居中" |
42 |
android:layout_gravity = "center" |
43 |
android:textAppearance = "?android:attr/textAppearanceLarge" /> |
46 |
android:id = "@+id/linearLayout1" |
47 |
android:layout_width = "match_parent" |
48 |
android:layout_height = "wrap_content" |
49 |
android:orientation = "horizontal" |
50 |
android:gravity = "center" |
53 |
android:id = "@+id/button1" |
54 |
android:layout_width = "wrap_content" |
55 |
android:layout_height = "wrap_content" |
56 |
android:text = "btn1" /> |
58 |
android:id = "@+id/button2" |
59 |
android:layout_width = "wrap_content" |
60 |
android:layout_height = "wrap_content" |
61 |
android:text = " btn2" /> |
63 |
android:id = "@+id/button3" |
64 |
android:layout_width = "wrap_content" |
65 |
android:layout_height = "wrap_content" |
66 |
android:text = "btn3" /> |
69 |
android:id = "@+id/button4" |
70 |
android:layout_width = "match_parent" |
71 |
android:layout_height = "wrap_content" |
72 |
android:text = "垂直布置 btn4" /> |
74 |
android:id = "@+id/button5" |
75 |
android:layout_width = "match_parent" |
76 |
android:layout_height = "wrap_content" |
77 |
android:text = "垂直布置 btn5" /> |
79 |
android:id = "@+id/textView1" |
80 |
android:layout_width = "wrap_content" |
81 |
android:layout_height = "wrap_content" |
82 |
android:text = "以上均为垂直布置" |
83 |
android:textAppearance = "?android:attr/textAppearanceLarge" /> |
效果如图:
3.相对布局控件RelativeLayout
布置在RelativeLayout中的控件会多出几个属性,主要用于处理控件的相对位置——相对于父容器、相对于一个控件元素。常用的属性如下:
属性名称 |
值 |
备注 |
相对于父窗口 |
layout_alignParentBottom |
布尔值 |
值为true则表示与父窗口底部对齐 |
layout_alignParentTop |
布尔值 |
值为true则表示与父窗口顶部对齐 |
layout_alignParentRight |
布尔值 |
值为true则表示与父窗口右侧对齐 |
layout_alignParentLeft |
布尔值 |
值为true则表示与父窗口左侧对齐 |
layout_centerInParent |
布尔值 |
值为true则表示在父窗口中居中 |
layout_centerHorizontal |
布尔值 |
值为true则表示与父窗口中水平居中 |
layout_centerVertical |
布尔值 |
值为true则表示与父窗口中垂直居中 |
相对于控件元素 |
layout_above |
参照控件id |
该控件的底部对齐参照控件的上方 |
layout_below |
参照控件id |
该控件的顶部对齐参照控件的底部 |
layout_toLeftOf |
参照控件id |
该控件的右侧对齐参照控件的左侧 |
layout_toRightOf |
参照控件id |
该控件的左侧对齐参照控件的右侧 |
效果如图:
4.框架布局控件FrameLayout
这是一个简单的布局,放入里面的控件依次层叠,后方的控件就会盖住先放的控件。
5.表格控件TableLayout
一个TableLayout里面有表格行控件TableRow,每个TableRow里布置各自的控件,好比是一个大架子里面放了很多个抽屉,各个抽屉里放着各自的东西,类型可以不同,大小可以不同。如图:
问题总结
Android开发中页面布局的重要性是不言而喻的。在Android软件开发中常用到的整体布局控件有:线性布局控件LinearLayout、相对布局控件RelativeLayout、框架布局控件FrameLayout、表格布局控件TableLayout等。他们各有各的适用情况。而且这些控件的属性含义是互通的。只要你有创意、一定的美工基础和耐心,你就能开发出美观的界面来。谢谢支持www.androidwhy.com的发展!本文代码在下方附件位置提供下载,有需要请直接下载。
推荐阅读:
Android开发:EditText,TextView以及Button的使用
Android开发:为什么学习Android开发?如何学好Android开发?