《Android核心技术与实例详解—Android布局管理器.pdf》由会员分享,可在线阅读,更多相关《Android核心技术与实例详解—Android布局管理器.pdf(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实战 Android 编程手把手教你做出商用软件 34 第3章Android 布局管理器本章要介绍的内容为Android 平台下的布局管理器。Android 中的布局包括线性布局、表格布局、相对布局、帧布局和绝对布局。下面将分别对每个布局管理器进行详细的介绍。3.1 控件类概述 3.1.1 View类简介在介绍 Android 的布局管理器之前,有必要让读者了解Android 平台下的控件类。首先要了解的是View 类,该类为所有可视化控件的基类,主要提供了控件绘制和事件处理的方法。创建用户界面所使用的控件都继承自View,如 TextView、Button、CheckBox 等。关于 Vie
2、w 及其子类的相关属性,既可以在布局XML 文件中进行设置,也可以通过成员方法在代码中动态设置。View 类常用的属性及其对应方法如表3-1 所示。表 3-1 View类常用属性及对应方法说明属性名称对应方法描述android:background setBackgroundResource(int)设置背景android:clickable setClickable(boolean)设置 View 是否响应点击事件android:visibility setVisibility(int)控制 View 的可见性android:focusable setFocusable(boolean)控制
3、 View 是否可以获取焦点android:id setId(int)为 View 设置标识符,可通过findViewById方法获取android:longClickable setLongClickable(boolean)设置 View 是否响应长点击事件android:soundEffectsEnabled setSoundEffectsEnabled(boolean)设置当 View 触发点击等事件时是否播放音效android:saveEnabled setSaveEnabled(boolean)如果未作设置,当View 被冻结时将不会保存其状态android:nextFocusDo
4、wn setNextFocusDownId(int)定义当向下搜索时应该获取焦点的View,如果该View不存在或不可见,则会抛出RuntimeException 异常android:nextFocusLeft setNextFocusLeftId(int)定义当向左搜索时应该获取焦点的View android:nextFocusRight setNextFocusRightId(int)定义当向右搜索时应该获取焦点的View 续表属性名称对应方法描述android:nextFocusUp setNextFocusUpId(int)定义当向上搜索时应该获取焦点的View,如果该View第 3
5、章 Android布局管理器35不存在或不可见,则会抛出RuntimeException 异常说明:任何继承自View 的子类都将拥有View 类的以上属性及对应方法。3.1.2 ViewGroup类简介另外一个需要了解的是ViewGroup 类,它也是View 类的子类,但是可以充当其他控件的容器。ViewGroup 的子控件既可以是普通的View,也可以是 ViewGroup,实际上,这是使用了Composite 的设计模式。Android 中的一些高级控件如Galley、GridView 等都继承自ViewGroup。与 Java SE 不同,Android 中并没有设计布局管理器,而是
6、为每种不同的布局提供了一个ViewGroup 的子类,常用的布局及其类结构如图3-1 所示。3.2 线性布局 本节将会对线性布局进行简单的介绍。首先向读者介绍LinearLayout 类的相关知识,然后通过一个实例说明LinearLayout 的用法。3.2.1 LinearLayout类简介线性布局是最简单的布局之一,它提供了控件水平或者垂直排列的模型。同时,使用此布局时可以通过设置控件的weight 参数控制各个控件在容器中的相对大小。LinearLayout 布局的属性既可以在布局文件(XML)中设置,也可以通过成员方法进行设置。表3-2 给出了LinearLayout 常用的属性及这些
7、属性的对应设置方法。表 3-2 LinearLayout常用属性及对应方法属性名称对应方法描述android:orientation setOrientation(int)设置线性布局的朝向,可取horizontal 和 vertical 两种排列方式android:gravity setGravity(int)设置线性布局的内部元素的布局方式在线性布局中可使用gravity 属性来设置控件的对齐方式,gravity 可取的值及说明如表3-3 所示。提示:当需要为gravity 设置多个值时,用“|”分隔即可。表 3-3 gravity可取的属性及说明属 性 值说明top 不改变控件大小,对齐
8、到容器顶部续表属 性 值说明bottom 不改变控件大小,对齐到容器底部图 3-1 布局管理器的类结构实战 Android 编程手把手教你做出商用软件 36 left 不改变控件大小,对齐到容器左侧right 不改变控件大小,对齐到容器右侧center_vertical 不改变控件大小,对齐到容器纵向中央位置center-horizontal 不改变控件大小,对齐到容器横向中央位置center 不改变控件大小,对齐到容器中央位置fill_vertical 若有可能,纵向拉伸以填满容器fill_horizontal 若有可能,横向拉伸以填满容器fill 若有可能,纵向横向同时拉伸以填满容器3.2
9、.2 线性布局案例在前面的章节中介绍了LinearLayout类的相关知识,本节将通过一个案例来说明LinearLayout 的用法。本案例的开发步骤如下。在 Eclipse 中新建一个项目Sample_3_1,首先打开项目文件夹下res/values 目录下的strings.xml,在其中输入如下代码。1 2 3 LinearExample 4 按钮 5 添加 6 代码位置:见随书光盘中源代码/第 3 章/Sample_3_1/res/values 目录下的 strings.xml。说明:在strings.xml 中主要声明了程序中要用到的字符串资源,这样将所有字符串资源统一管理有助于提高程
10、序的可读性及可维护性。打开项目文件夹下的res/layout目录下的 main.xml,将其中已有的代码替换为如下代码。1 2 9 14 15 代码位置:见随书光盘中源代码/第 3 章/Sample_3_1/res/layout 目录下的 main.xml。?第 28 行声明了一个线性布局,第3 行设置线性布局的朝向为垂直排列。?第 45 行设置该线性布局在其所属的父容器中的布局方式为横向和纵向填充父容器。?第 6 行为该线性布局声明了ID。第 7 行设置该线性布局内部元素的布置方式为向右对齐。第 3 章 Android布局管理器37?第 914 行声明了一个Button 控件,其ID 为 B
11、utton01,第 10 行设置 Button 控件显示的文本内容为资源文件strings.xml 中的属性值。?第 1213 行设置 Button 控件在父容器中的布局方式为只占据自身大小的空间。打开项目的Activity 文件 LinearActivity.java,将其中已有的代码替换为如下的代码。1 package wyf.jc;/声明包语句2 import android.app.Activity;/引入相关类3 import android.os.Bundle;/引入相关类4 import android.view.View;/引入相关类5 import android.widge
12、t.Button;/引入相关类6 import android.widget.LinearLayout;/引入相关类7 public class LinearActivity extends Activity 8 int count=0;/计数器,记录按钮个数9 Override 10 public void onCreate(Bundle savedInstanceState)/重写 onCreate方法11 super.onCreate(savedInstanceState);12 setContentView(R.layout.main);13 Button button=(Button
13、)findViewById(R.id.Button01);/获取屏幕中的按钮控件对象14 button.setOnClickListener(/为按钮添加OnClickListener接口实现15 new View.OnClickListener()16 public void onClick(View v)17 LinearLayout ll=(LinearLayout)findViewById(R.id.lla);/获取线性布局对象18 String msg=LinearActivity.this.getResources().getString(R.string.button);19 B
14、utton tempbutton=new Button(LinearActivity.this);/创建一个Button对象20 tempbutton.setText(msg+(+count);/设置 Button控件显示的内容21 tempbutton.setWidth(80);/设置 Button的宽度22 ll.addView(tempbutton);/向线性布局中添加View 23 24 );25 26 代码位置:见随书光盘中源代码/第 3 章/Sample_3_1/src/wyf/jc 目录下的 main.xml。?代码第 8 行声明了用于记录生成的按钮编号的计数器。?代码第 13
15、行通过 findViewById方法获取屏幕中的Button 控件对象。?代码第 1524 行为 Button 对象添加了OnClickListener 监听器的实现。?代码第 1723 行为对 OnClickListener接口中 onClick 方法的实现,在该方法中首先获 得 线 性 布 局 LinearLayout对 象 的 引 用,然 后 创 建 一 个Button对 象 并 调 用LinearLayout 对象的 addView 方法将其添加到线性布局容器中。完成上述三个步骤的工作后,运行项目,在程序中单击“添加”按钮可向屏幕中添加新的按钮,效果图如图3-2 所示。图 3-2 为当
16、 LinearLayout 的 orientation 属性为 vertical 时的运行效果,下面来看 orientation值为 horizontal 时的运行效果,将步骤中的第 3 行代码改为如下代码。1 android:orientation=horizontal 代码位置:见随书光盘中源代码/第 3 章/Sample_3_1/res/layout 目录下的 main.xml。实战 Android 编程手把手教你做出商用软件 38 运行项目 Sample_3_1,在程序中可以单击“添加”按钮向屏幕中添加新按钮,如图 3-3 所示。图 3-2 Sample_3_1 运行效果图1 图 3-
17、3 Sample_3_1运行效果图2 提示:在线性布局中垂直分布时占一列,水平分布时占一行。特别要注意的是,水平或垂直分布时如果超过一行,则不会像Java SE中的 FlowLayout 那样自动换行或换列,超出屏幕的子控件将不会被显示,除非将其放到ScrollView 中。3.3 表格布局 本节将要介绍的布局管理器是表格布局,首先将对TableLayout 类进行简单的介绍,然后通过一个案例来说明表格布局的用法。3.3.1 TableLayout类简介TableLayout 类以行和列的形式管理控件,每行为一个TableRow 对象,也可以为一个View对象,当为View 对象时,该View
18、 对象将跨越该行的所有列。在TableRow 中可以添加子控件,每添加一个子控件为一列。TableLayout 布局中并不会为每一行、每一列或每个单元格绘制边框,每一行可以有0 或多个单元格,每个单元格为一个View 对象。TableLayout 中可以有空的单元格,单元格也可以像 HTML 中那样跨越多个列。在表格布局中,一个列的宽度由该列中最宽的那个单元格指定,而表格的宽度是由父容器指定的。在TableLayout 中,可以为列设置三种属性。?Shrinkable,如果一个列被标识为shrinkable,则该列的宽度可以进行收缩,以使表格能够适应其父容器的大小。?Stretchable,如
19、果一个列被标识为stretchable,则该列的宽度可以进行拉伸,以使填满表格中空闲的空间。?Collapsed,如果一个列被标识为collapsed,则该列将会被隐藏。注意:一个列可以同时具有Shrinkable 和 Stretchable 属性,在这种情况下,该列的宽度将任意拉伸或收缩以适应父容器。TableLayout 继承自 LinearLayout 类,除了继承来自父类的属性和方法,TableLayout 类中还包含表格布局所特有的属性和方法。这些属性和方法说明如表3-4 所示。第 3 章 Android布局管理器39表 3-4 TableLayout类常用属性及对应方法说明属性名称
20、对应方法描述android:collapseColumns setColumnCollapsed(int,boolean)设置指定列号的列为Collapsed,列号从 0 开始计算android:shrinkColumns setShrinkAllColumns(boolean)设置指定列号的列为Shrinkable,列号从 0 开始计算android:stretchColumns setStretchAllColumns(boolean)设置指定列号的列为Stretchable,列号从 0 开始计算说明:setShrinkAllColumns和 setStretchAllColumns 实现
21、的功能是将表格中的所有列设置为 Shrinkable 或 Stretchable。3.3.2 表格布局案例在前面的章节中介绍了TableLayout 的相关知识。本节将通过一个案例来说明TableLayout布局管理器的用法,该案例的开发步骤如下。在 Eclipse 中创建一个项目Sample_3_2。打开项目res/values 目录下的strings.xml,在其中输入如下代码。1 2 3 TableExample 4 我自己是一行.我自己是一行 5 我的内容少 6 我是被拉伸的一列 7 我是被收缩的一列被收缩的一列 8 我的内容比较长比较长比较长 9 代码位置:见随书光盘中源代码/第 3
22、 章/Sample_3_2/res/values 目录下的 strings.xml。?代码第 4 行声明的字符串对象将会作为独占表格中一行的TextView 的字符串内容。?代码第 5行声明的字符串对象将会作为表格某行中内容较少的TextView 的字符串内容。?代码第 6 行声明的字符串对象将会作为表格某行中内容较少被拉伸的TextView 的字符串内容。?代码第 7 行声明的字符串对象将会作为表格某行中内容较多被收缩的Textview 的字符串内容。?代码第 8行声明的字符串对象将会作为表格某行中内容较多的TextView 的字符串内容。开发程序的布局文件。在本案例中,在布局文件 main
23、.xml 中定义了三个表格,每个表格中只包含一行,各表格的布局示意图如图3-4 所示。下面分别介绍每个表格的内部布局方式。首先打开项目 res/layout 目录下的main.xml 文件,将其中已有的代码替换为如下代码。1 图 3-4 Sample_3_2中表格布局示意图实战 Android 编程手把手教你做出商用软件 40 2 /声明一个垂直排列的线性布局11 /声明一个表格布局17 /此处省略TableLayout的部分代码,将在随后补全18 19 /声明一个表格布局26 /此处省略TableLayout的部分代码,将在随后补全27 28 /声明一个表格布局36 /此处省略TableLa
24、yout的部分代码,将在随后补全37 38 代码位置:见随书光盘中源代码/第 3 章/Sample_3_2/res/layout 目录下的 main.xml。?代码第 210 行声明了一个线性布局,在该线性布局中将会垂直摆放三个表格布局,代码第 8 行为该布局设置了背景图片。?代码第 1118 行声明了一个表格布局,该表格布局的ID 为 TableLayout01,其背景色为白色。?代码第 1928 行声明了一个表格布局,该表格布局的ID 为 TableLayout02,其背景色为白色,并且对编号为0 的列设置了Stretchable 属性。?代码第 2937 行声明了一个表格布局,该表格布局
25、的ID 为 TableLayout03,其背景色为白色,并且对编号为1 的列设置了Collapsed 属性,对编号为 0 的列设置了Shrinkable属性。提示:如果需要对多个列设置Stretchable、Shrinkable 或 Couapsed 属性,需要用逗号隔开每个要设置的列的编号。下面具体实现每个TableLayout,首先是 ID 为 TableLayout01 的表格布局的实现代码,如第 3 章 Android布局管理器41下所示。1 11 代码位置:见随书光盘中源代码/第 3 章/Sample_3_2/res/layout 目录下的 main.xml。?代码第 2 行为 Te
26、xtView 控件设置了显示的内容。?代码第 7 行设置 TextView 的背景色为红色。?代码第 8 行设置 TextView 的字体颜色为黑色。在上述表格布局中,表格中只有一行,而在该行声明了一个TextView 对象占满所有的列。下面介绍ID 为 TextView02 的表格布局的实现代码,如下所示。1 5 15 16 26 27 代码位置:见随书光盘中源代码/第 3 章/Sample_3_2/res/layout 目录下的 main.xml。?代码第 14 行声明了一个TableRow,并设置其在父容器中的布局方式。?代码第515 行声明了TextView,并为其指定了ID 和在父容
27、器中的布局方式。该TextView 所占的列被设置了Stretchable 属性。?代码第 1626 行声明了一个TextView 控件,并为其指定了ID。该 TextView 中所显实战 Android 编程手把手教你做出商用软件 42 示的内容较少,所以代码第515 行声明的TextView 控件会填充该TextView 剩下的空间。上述表格布局中总共有一个用TableRow 声明的行,在该行中包括两列,其中一列被设置了 Stretchable 属性。下面来看ID 为 TableLayout03 的表格布局的实现代码,如下所示。1 5 15 16 26 27 37 38 代码位置:见随书光
28、盘中源代码/第 3 章/Sample_3_2/res/layout 目录下的 main.xml。?代码第 14 行声明了一个TableRow,并设置了其在父容器中的布局。?代码第515 行声明了一个TextView控件,该TextView控件所占的列被设置了Shrinkable 属性,可收缩的列将会纵向扩展。?代码第1626 行声明了一个TextView控件,该TextView控件所占的列被设置了Collapsed 属性,所以此View 将不会被显示。?代码第 2737 行声明了一个TextView 控件,该TextView 控件所显示的内容比较长,所以会迫使代码第515 行声明的TextVi
29、ew 控件所占的列进行收缩。完成了布局文件main.xml 的开发之后,最后开发Activity 部分的代码。打开项目的Activity类 TableActivity.java,在其中输入如下代码。第 3 章 Android布局管理器431 package wyf.jc;/声明包语句2 import android.app.Activity;/引入相关类3 import android.os.Bundle;/引入相关类4 public class TableActivity extends Activity 5 Override 6 public void onCreate(Bundle sa
30、vedInstanceState)/重写 onCreate方法7 super.onCreate(savedInstanceState);8 setContentView(R.layout.main);/设置布局文件main.xml为当前屏幕9 10 代码位置:见随书光盘中源代码/第 3 章/Sample_3_2/src/wyf/jc 目录下的 TableActivity.java。说明:TableActivity的代码比较简单,只是在onCreate 方法中将当前的屏幕设置为步骤中开发好的main.xml 文件。完成上述步骤的开发之后,下面运行本应用程序,如图3-5 所示。在图 3-5 中,第
31、 2 个表格的第1 列和第 3 个表格的第1 列分别设置了拉伸和收缩的属性,因此在该行的其他列所显示的内容比较多或比较少时,这些设置了拉伸和收缩属性的列会自动伸长或缩短,以保证表格的宽度不变。3.4 相对布局 本节将要介绍的是相对布局。相对布局比较容易理解,下面首先介绍RelativeLayout 类的相关知识,然后通过一个案例来说明相对布局的使用。3.4.1 RelativeLayout类简介在相对布局中,子控件的位置是相对兄弟控件或父容器而决定的。出于性能考虑,在设计相对布局时要按照控件之间的依赖关系排列,如 View A 的位置相对于View B 来决定,则需要保证在布局文件中View
32、B 在 View A 的前面。在进行相对布局时用到的属性很多,首先来看属性值只为true 或 false 的属性,如表3-5所示。表 3-5 相对布局中只取true 或 false 的属性属性名称属性说明android:layout_centerHorizontal 当前控件位于父控件的横向中间位置android:layout_centerVertical 当前控件位于父控件的纵向中间位置续表属性名称属性说明android:layout_centerInParent 当前控件位于父控件的中央位置android:layout_alignParentBottom 当前控件底端与父控件底端对齐图 3
33、-5 Sample_3_2运行效果图实战 Android 编程手把手教你做出商用软件 44 android:layout_alignParentLeft 当前控件左侧与父控件左侧对齐android:layout_alignParentRight 当前控件右侧与父控件右侧对齐android:layout_alignParentTop 当前控件顶端与父控件顶端对齐android:layout_alignWithParentIfMissing 参照控件不存在或不可见时参照父控件接下来再来看属性值为其他控件id 的属性,如表3-6 所示。表 3-6 相对布局中取值为其他控件id 的属性及说明属性名称属
34、性说明android:layout_toRightOf 使当前控件位于给出id 控件的右侧android:layout_toLeftOf 使当前控件位于给出id 控件的左侧android:layout_above 使当前控件位于给出id 控件的上方android:layout_below 使当前控件位于给出id 控件的下方android:layout_alignTop 使当前控件的上边界与给出id 控件的上边界对齐android:layout_alignBottom 使当前控件的下边界与给出id 控件的下边界对齐android:layout_alignLeft 使当前控件的左边界与给出id 控
35、件的左边界对齐android:layout_alignRight 使当前控件的右边界与给出id 控件的右边界对齐最后要介绍的是属性值以像素为单位的属性及说明,如表3-7 所示。表 3-7 相对布局中取值为像素的属性及说明属性名称属性说明android:layout_marginLeft 当前控件左侧的留白android:layout_marginRight 当前控件右侧的留白android:layout_marginTop 当前控件上方的留白android:layout_marginBottom 当前控件下方的留白需要注意的是在进行相对布局时要避免出现循环依赖,例如设置相对布局在父容器中的排列
36、方式为WRAP_CONTENT,就不能再将相对布局的子控件设置为ALIGN_PARENT_ BOTTOM。因为这样会造成子控件和父控件相互依赖和参照的错误。3.4.2 相对布局案例前面的章节介绍了RelativeLayout类的相关知识,本节将会通过一个案例来说明RelativeLayout 的用法,开发步骤如下。在 Eclipse 中新建一个项目Sample_3_3,首先进行布局文件main.xml 的开发。打开res/layout 目录下的main.xml,将其中已有的代码替换成如下代码。1 2 7 14 15 23 24 32 33 代码位置:见随书光盘中源代码/第 3 章/Sample
37、_3_3/res/layout 目录下的 main.xml。?代码第 26 行声明了一个相对布局,声明了其id 及在父控件中的布局规则。?代码第713 行声明了一个ImageView 控件,并在代码第12 行设置其位置属性android:layout_centerInParent 为 true,即该控件位于父控件的中央位置。?代码第 1523 行声明了一个ImageView 控件,并在代码第20 和 21 行设置其位置属性 android:layout_toRightOf和 android:layout_alignTop均为ImageView01,即位于ImageView01 的上方。?代码第
38、 2432 行声明了一个ImageView 控件并在代码第29 和 30 行设置其位置属性android:layout_above和android:layout_alignLeft均 为ImageView01,即 位 于ImageView01 的上方。接下来进行Activity部分的开发。打开项目的Activity 文件 RelativeActivity.java,在其中输入如下代码。1 package wyf.jc;/声明包语句2 import android.app.Activity;/引入相关类3 import android.os.Bundle;/引入相关类4 public class
39、 RelativeActivity extends Activity 5 Override 6 public void onCreate(Bundle savedInstanceState)/重写 onCreate方法7 super.onCreate(savedInstanceState);8 setContentView(R.layout.main);/设置当前屏幕为main.xml 9 10 代码位置:见随书光盘中源代码/第 3 章/Sample_3_3/src/wyf/jc 目录下的 RelativeActivity.java。说明:Activity部分的代码比较简单,主要工作是在onC
40、reate 方法中将 Activity 的当前实战 Android 编程手把手教你做出商用软件 46 屏幕设置为main.xml 布局文件。完成了上述步骤的开发,下面运行本项目,如图 3-6 所示。在图 3-6 中,参照控件为屏幕中心的南瓜图片,兔子图片相对于南瓜在其上方,而小猪图片相对于南瓜图片在其右方。3.5 帧布局 本节将要介绍的帧布局是最容易理解的一种布局,在本节的内容中,首先介绍FrameLayout 类的相关知识,然后开发一个小案例来说明帧布局的用法。3.5.1 FrameLayout类简介FrameLayout 帧布局在屏幕上开辟出了一块区域,在这块区域中可以添加多个子控件,但是
41、所有的子控件都被对齐到屏幕的左上角。帧布局的大小由子控件中尺寸最大的那个子控件来决定。如果子控件一样大,同一时刻只能看到最上面的子控件。FrameLayout 继承自 ViewGroup,除了继承自父类的属性和方法,FrameLayout 类中包含了自己特有的属性和方法,如表3-8 所示。表 3-8 FrameLayout属性及对应方法属性名称对应方法描述android:foreground setForeground(Drawable)设置绘制在所有子控件之上的内容android:foregroundGravity setForegroundGravity(int)设置绘制在所有子控件之上内
42、容的gravity 属性提示:在FrameLayout 中,子控件是通过栈来绘制的,所以后添加的子控件会被绘制在上层。3.5.2 帧布局案例前面的章节对帧布局FrameLayout 类进行了简单的介绍。本节将通过一个案例对帧布局的用法进行说明,开发步骤如下。在 Eclipse 中新建一个项目Sample_3_4。打开其res/values 目录下的 strings.xml,在其中输入如下代码。1 2 3 FrameExample 4 大的 5 中的 6 小的 7 图 3-6 Sample_3_3运行效果图第 3 章 Android布局管理器47代码位置:见随书光盘中源代码/第 3 章/Samp
43、le_3_4/res/values 目录下的 strings.xml。说明:strings.xml 中声明了应用程序总会用到的字符串资源。在项目 rers/values 目录下新建一个colors.xml,在其中输入如下代码。1 2 3#FF0000 4#00FF00 5#0000FF 6#FFFFFF 7 代码位置:见随书光盘中源代码/第 3 章/Sample_3_4/res/values 目录下的 colors.xml。说明:colors.xml中声明了应用程序中将会用到的颜色资源。这样将所有颜色资源统一管理有助于提高程序的可读性及可维护性。打开项目res/layout 目录下的main.
44、xml 文件,将其中已有的代码替换为如下代码。1 2 8 16 17 25 26 34 35 代码位置:见随书光盘中源代码/第 3 章/Sample_3_4/res/layout 目录下的 main.xml。?代码第 27 行声明了一个帧布局,并设置其在父控件中的显示方式及自身的背景颜色。实战 Android 编程手把手教你做出商用软件 48?代码第 816 行声明了一个TextView 控件,该控件 id 为 TextView01,第 13 行定义了其显示内容的字号为60px,第 14 行定义了所显示内容的字体颜色为绿色。?代码第 1725 行声明了一个TextView 控件,该控件id 为
45、 TextView02,第 22 行定义了其显示内容的字号为40px,第 23 行定义了所显示内容的字体颜色为红色。?代码第 2634 行声明了一个TextView 控件,该控件id 为 TextView03,第 22 行定义了其显示内容的字号为20px,第 23 行定义了所显示内容的字体颜色为蓝色。进行 Activity部分的开发。打开程序的Activity文件 FrameActivity.java,在其中输入如下代码。1 package wyf.jc;/声明包语句2 import android.app.Activity;/引入相关类3 import android.os.Bundle;/
46、引入相关类4 public class FrameActivity extends Activity 5 Override 6 public void onCreate(Bundle savedInstanceState)/重写 onCreate方法7 super.onCreate(savedInstanceState);8 setContentView(R.layout.main);/设置当前屏幕9 10 代码位置:见随书光盘中源代码/第 3 章/Sample_3_4/src/wyf/jc 目录下的 FrameActivity.java。说明:Activity部分的代码比较简单,其主要的工作
47、是在onCreate 方法中将Activity的当前屏幕设置为main.xml 布局文件。完成了上述步骤的开发后,运行Sample_3_4,其效果如图 3-7 所示。在图 3-7 中可以看到,程序运行时所有的子控件都自动地对齐到容器的左上角,由于子控件的TextView 是按照字号从大到小排列的,所以字号小的在最上层。3.6 绝对布局 本节要介绍的绝对布局是一种用起来比较费时的布局管理器。首先介绍AbsoluteLayout类的相关知识,然后通过一个案例来说明绝对布局的用法。3.6.1 AbsoluteLayout类简介所谓绝对布局,是指屏幕中所有控件的摆放由开发人员通过设置控件的坐标来指定,
48、控件容器不再负责管理其子控件的位置。由于子控件的位置和布局都通过坐标来指定,因此AbsoluteLayout 类中并没有开发特有的属性和方法。图 3-7 Sample_3_4运行效果图第 3 章 Android布局管理器493.6.2 绝对布局案例在前面的章节中对AbsoluteLayout 进行了简单的介绍,本节将通过一个案例来说明绝对布局的使用方法。该案例的开发步骤如下。在 Eclipse 中新建一个项目Sample_3_5。打开 res/values 目录下的strings.xml,在其中输入如下代码。1 2 3 AbsoluteExample 4 用户名 5 密码 6 确定 7 取消
49、8 代码位置:见随书光盘中源代码/第 3 章/Sample_3_5/res/values 目录下的 strings.xml。在项目 res/values 目录下新建一个文件colors.xml,在其中输入如下代码。1 2 3#fd8d8d 4#9cfda3 5#8d9dfd 6#FFFFFF 7#000000 8 代码位置:见随书光盘中源代码/第 3 章/Sample_3_5/res/values 目录下的 colors.xml。说明:colors.xml 中声明了应用程序中将会用到的颜色资源。这样将所有颜色资源统一管理有助于提高程序的可读性和可维护性。进行布局文件的开发。程序中各个控件的布局
50、如图3-8所示。其中ScrollView 中放置了一个EditText 子控件。打开项目src/wyf/jc 目录下的main.xml,将其中已有的代码替换为如下代码。1 2 6 10 图 3-8 程序各控件位置示意图实战 Android 编程手把手教你做出商用软件 50 11 15 16 20 21 26 27 32 33 38 39 43 47 48 49 代码位置:见随书光盘中源代码/第 3 章/Sample_3_5/res/layout 目录下的 main.xml。?代码第 25 行声明了一个AbsoluteLayout,并设置了其在父容器中的显示方式。?代码第 610 行和第 111