fbpx

[email protected]

购物车

 查看订单

  • 我的帐户
东东购 | EasternEast
  • 中文书店
    • 畅销排行榜
      • 小说 畅销榜
      • 童书 畅销榜
      • 外语畅销榜
      • 管理畅销榜
      • 法律畅销榜
      • 青春文学畅销榜
    • 热门分类
      • 社会小说
      • 成功/励志 畅销榜
      • 人物传记
      • 大陆原创
      • 绘本童书
      • 影视小说
    • 文学推荐
      • 文集
      • 戏剧
      • 纪实文学
      • 名家作品
      • 民间文学
      • 中国现当代随笔
    • 新书热卖榜
      • 小说 新书热卖榜
      • 青春文学 新书热卖榜
      • 童书 新书热卖榜
      • 管理 新书热卖榜
      • 成功/励志 新书热卖榜
      • 艺术 新书热卖榜
  • 精选分类
    • 小说
    • 保健养生
    • 烹饪/美食
    • 风水/占卜
    • 青春文学
    • 童书
    • 管理
    • 成功/励志
    • 文学
    • 哲学/宗教
    • 传记
    • 投资理财
    • 亲子家教
    • 动漫/幽默
    • 法律 Legal
    • 经济 Economics
    • 所有分类
  • 关于东东
  • 帮我找书
搜索
首页计算机/网络移动开发Android应用程序设计(修订版)

Android应用程序设计(修订版)

从零基础知识学习,*终能综合所学内容开发应用

作者:张思民 出版社:清华大学出版社 出版时间:2018年04月 

ISBN: 9787302495789
年中特卖用“SALE15”折扣卷全场书籍85折!可与三本88折,六本78折的优惠叠加计算!全球包邮!
trust badge

EUR €28.99

类别: 研究生/本科/专科教材, 移动开发 SKU:5d8403985f98491045402710 库存: 有现货
  • 描述
  • 评论( 0 )

描述

开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302495789丛书名: 21世纪高等学校计算机类课程创新规划教材·微课版

编辑推荐
理论与实践结合:从基础知识学习,*终能综合所学内容开发应用。体现了Android 特性,采用Eclipse ADT环境 
内容简介
本书是面向Android系统的初学者的入门教程,内容几乎涵盖了Android相关的所有技术。本书大致可以分成两个部分,*部分(第1~4章)主要介绍Android SDK开发环境的安装、应用程序的结构、用户界面的组件及其设计方法,第二部分(第5~10章)主要介绍较高级的主题,内容包括异常处理与多线程、后台服务与系统服务技术、图形与多媒体处理技术、数据库技术及输入/输出流的处理技术、网络通信技术、地图服务及传感器检测技术等。
  本书在叙述上浅显易懂,对每一个知识点都配了相应的例题。本书提供了所有例题的源代码、电子课件,以及本书大部分例题的视频教学演示(扫描二维码)。
  本书可以作为高等院校及各类培训学校Android系统课程的教材,也可以作为学习Android程序设计的编程人员的自学用书。
目  录

第1章  Android系统及其开发过程… 1

1.1 
Android系统概述… 1

1.2  安装Android SDK开发环境… 2

1.2.1  安装Android SDK前必要的准备… 2

1.2.2 安装Android SDK详解… 3

1.2.3 
设置环境变量… 7

1.3 
Android API和在线帮助文档… 7

1.4 
Android应用程序的开发过程… 8

1.4.1 
开发Android应用程序的一般过程… 8

1.4.2 
生成Android应用程序框架… 9

1.4.3 编写MainActivity.java. 10

1.4.4 
配置应用程序的运行参数… 11

1.4.5 
在模拟器中运行应用程序… 12

1.5 
Android应用程序结构… 12

1.5.1 
目录结构… 12

1.5.2  Android应用程序架构分析… 18

1.6 
Android应用程序设计示例… 19

习题1. 21

第2章  Java语法概述… 22

2.1 语法基础… 22

2.1.1 
数据类型… 22

2.1.2 常量与变量… 23

2.1.3 对变量赋值… 24

2.1.4 关键字… 24

2.1.5 转义符… 24

2.2  基本数据类型应用示例… 25

2.2.1 整型与浮点型… 25

2.2.2 字符型… 27

2.2.3 布尔型… 28

2.2.4 
数据类型的转换… 29

2.3  程序控制语句… 30

2.3.1 
语句的分类… 30

2.3.2 
顺序控制语句… 31

2.3.3 if语句… 32

2.3.4 
switch语句… 34

2.3.5 
循环语句… 35

2.3.6  转语句… 40

2.4 类与对象… 42

2.4.1 
类的定义… 42

2.4.2 
对象… 44

2.4.3 
接口… 46

2.4.4 
包… 47

2.5  XML语法简介… 47

习题2. 51

第3章  Android用户界面设计… 53

3.1  用户界面组件包widget和View类… 53

3.2  文本标签与按钮… 54

3.2.1 
文本标签… 54

3.2.2 
按钮… 56

3.3  文本编辑框… 61

3.4 Android布局管理… 64

3.4.1 
布局文件的规范与重要属性… 64

3.4.2 
常见的布局方式… 65

3.5  进度条和选项按钮… 72

3.5.1 
进度条… 72

3.5.2 
选项按钮… 74

3.6 图像显示与画廊组件… 80

3.6.1 
图像显示ImageView类… 80

3.6.2 
画廊组件Gallery与图片切换器ImageSwitcher 84

3.7  消息提示… 88

3.8 列表组件… 91

3.8.1 
列表组件ListView类… 91

3.8.2 
列表组件ListActivity类… 94

3.9 滑动抽屉组件… 96

习题3. 100

第4章  多个用户界面的程序设计… 102

4.1 页面切换与传递参数值… 102

4.1.1 传递参数组件Intent 102

4.1.2 Activity页面切换… 102

4.1.3 应用Intent在Activity页面之间传递数据… 106

4.2  菜单… 110

4.2.1 
选项菜单… 110

4.2.2 
上下文菜单… 112

4.3  对话框… 114

4.3.1 
消息对话框… 114

4.3.2 
其他几种常用对话框… 120

习题4. 123

第5章  异常处理与多线程… 124

5.1  异常处理… 124

5.2  多线程… 126

5.2.1  线程与多线程… 126

5.2.2  线程的生命周期… 127

5.2.3  线程的数据通信… 128

5.2.4  创建线程… 130

习题5. 137

第6章  图形与多媒体处理… 138

6.1 绘制几何图形… 138

6.1.1 几何图形绘制类… 138

6.1.2 
几何图形的绘制过程… 139

6.2  触摸屏事件处理… 144

6.2.1 
简单触摸屏事件… 144

6.2.2 
手势识别事件… 150

6.3  音频播放… 153

6.3.1 多媒体处理包… 153

6.3.2 媒体处理播放器… 154

6.3.3 播放音频文件… 155

6.4  视频播放… 161

6.4.1 
应用媒体播放器播放视频… 161

6.4.2 
应用视频视图播放视频… 164

6.5  录音与拍照… 166

6.5.1 
用于录音、录像的MediaRecorder类… 166

6.5.2 
录音示例… 167

6.5.3 
拍照… 170

6.6  将文本转换成语音… 176

6.7  图像处理技术… 178

6.7.1 
处理图像的颜色矩阵… 178

6.7.2 
处理图像的坐标变换矩阵… 184

习题6. 192

第7章  后台服务与系统服务技术… 193

7.1  后台服务Service. 193

7.2  信息广播机制Broadcast 197

7.3  系统服务… 206

7.3.1  Android的系统服务… 206

7.3.2 
系统通知服务Notification. 206

7.3.3 
系统定时服务AlarmManager 209

7.3.4 
系统功能的调用… 212

习题7. 215

第8章  数据存储… 216

8.1 
SQLite数据库… 216

8.1.1  SQLite数据库简介… 216

8.1.2  管理和操作SQLite数据库的对象… 217

8.1.3  SQLite数据库的操作命令… 218

8.2  文件处理… 230

8.2.1  输入流和输出流… 230

8.2.2  处理文件流… 231

8.3  轻量级存储SharedPreferences 237

习题8. 240

第9章  网络通信… 241

9.1 网络编程的基础知识… 241

9.1.1 IP地址和端口号… 241

9.1.2 套接字… 244

9.2  基于TCP的网络程序设计… 246

9.3  基于HTTP的网络程序设计… 251

9.4 
Web视图… 255

9.4.1  浏览器引擎WebKit 255

9.4.2  Web视图对象… 255

9.4.3  调用JavaScript 258

9.5 无线网络通信技术WiFi 266

习题9. 272

第10章  地图服务及传感器检测技术… 273

10.1 
Google地图… 273

10.1.1  Google Maps包… 273

10.1.2 导入Google地图API的Maps包… 274

10.1.3  显示地图MapView类… 274

10.1.4  添加Google地图的贴图… 279

10.2  位置服务… 282

10.3  传感器检测技术… 286

10.3.1  传感器简介… 286

10.3.2 
加速度传感器的应用示例… 289

习题10. 297

附录A  JavaSDK及Eclipse的安装与配置… 298

附录B  Android的调试工具… 300

附录C  Map  API
Key的申请过程   

前  言
Android系统自2007年推出以来,应用越来越广泛。除了手机、平板电脑使用Android系统之外,其他嵌入式系统也大量使用Android系统来设计。例如,车载设备、医疗设备、VoIP电话和智能电视等厂商纷纷推出Android系统产品。可以说,Android系统如日中天,相信将来还会有更好的发展。  1.本书特点  作为一本教材,本书有以下特点。  (1)易学易懂。本书面向Android系统的初学者,在叙述方式上浅显易懂,摒弃枯燥的理论,尽可能使用图示加以说明。对每一个知识点,都配了相应的例题。所有例题均短小精悍,适合课堂教学讲授。读者学完每一章内容后都可以编写出相应功能的程序。  (2)解释详细。对每一个例题,均进行了详细分析和解释,既可以帮助读者学习理解知识和概念,大大降低学习难度,又具有启发性。  (3)Java语言零基础学习。为了帮助没有Java语言基础的读者学习Android系统,特别安排了一章介绍Java基础知识的内容。  (4)配有视频教学演示。书中大部分例题均录制了教学视频,详细地记录了设计的操作过程,帮助读者更加轻松、迅速地理解和掌握本书内容。  2.学习方法  学习Android程序设计,应该循序渐进、由浅入深,不能跳跃式地进行,前面的内容还没搞清楚,就急于学习后面的内容,这样只会事倍功半,欲速则不达。  应该说,学习任何一种编程技术都会有一定难度。因此,要强调动手实践,多编程、多练习,熟能生巧,从学习中体验到程序设计的乐趣和成功的喜悦,增强学习信心。  3.本书内容  本书在内容结构上大致可以分成两个部分。  部分(第1~4章)主要介绍Android SDK开发环境的安装、应用程序的结构、用户界面的组件及其设计方法,该部分内容是学习Android程序设计的入门基础。  第1章主要讲解Android SDK开发环境的安装,并说明如何下载Android SDK和如何从头开始创建新的应用程序。第2章简要介绍Java语言基础知识,为不熟悉Java语言的读者提供帮助,对于已有Java语言基础的读者,可以跳过本章。第3~4章讲解如何使用布局和视图创建用户界面,介绍了用户图形界面的常用组件及多用户界面程序的开发。  第二部分(第5~10章)主要介绍较高级的主题,内容包括异常处理及多线程、图形与多媒体处理技术、后台服务与系统服务技术、数据库技术及输入/输出流的处理技术、网络通信技术、地图服务及传感器检测技术等。第5章讲解Android的异常处理方法以及多线程。第6章讲解图形与多媒体处理技术,介绍了绘制几何图形的基本方法、处理触摸屏事件的方法,还详细讨论了音频播放和视频播放的设计,以及录音、照相和文本转换语音技术,后详细讲解了如何处理图像的缩放、变形、颜色等数字图像处理技术。第7章讲解后台服务与系统服务,以及系统功能调用。第8章讲解数据存储技术,介绍了SQLite数据库存储方式、文件存储方式和XML文件的SharedPreferences存储方式。第9章讲解网络通信,介绍了Socket套接字编程、基于Web编程和与JavaScript脚本交互的编程技术,以及无线网络通信技术WiFi的程序设计方法。第10章讲解地图服务及传感器检测技术,地图服务主要介绍地图查询和贴图的方法,传感器检测主要介绍重力加速度的应用。  书中所有例题均已在Eclipse? ?ADT环境下运行通过。本书提供了所有例题的源代码、电子课件。  参加本书编写、校对及程序测试工作的还有梁维娜、张静文、杨军民、颜敏敏等,在此表示感谢。  由于编者水平有限,书中难免有不足之处,敬请读者批评指正。

编 者 2018年1月
在线试读
第3章Android用户界面设计          3.1  用户界面组件包widget和View类  1.用户界面组件包widget  Android系统为开发人员提供了丰富多彩的用户界面组件,通过使用这些组件可以设计出炫丽的界面。大多数用户界面组件放置在android.widget包中。widget包中的常用组件如表3-1所示。表3-1  widget包中的常用组件 可视化组件说    明Button按钮 CalendarView日历视图 CheckBox复选框 EditText文本编辑框 ImageView显示图像或图标,并提供缩放、着色等各种图像处理方法 ListView列表框视图MapView地图视图RadioGroup单选按钮组 Spinner下拉列表TextView文本标签WebView网页浏览器视图 Toast消息提示    2.View类  View是用户界面组件的共同父类,几乎所有的用户界面组件都是继承View类实现的,如TextView、Button、EditText等。  对于View类及其子类的属性,可以在界面布局文件中设置,也可以通过成员方法在Java代码文件中动态设置。View类的常用属性和方法如表3-2所示。 表3-2 View类的常用属性和方法属    性对 应 方 法说    明android:backgroundsetBackgroundColor (int color)设置背景颜色android:idsetId(int)为组件设置可通过findViewById方法获取的标识符续表属    性对 应 方 法说    明android:alphasetAlpha(float)设置透明度,取值范围为0~1
findViewById(int id)与id所对应的组件建立关联android:visibilitysetVisibility(int)设置组件的可见性android:clickablesetClickable(boolean)设置组件是否响应单击事件3.2  文本标签与按钮3.2.1  文本标签  文本标签(TextView)用于显示文本内容,是常用的组件之一。其常用方法见表3-3。表3-3 文本标签(TextView)常用方法方    法功    能getText();获取文本标签的文本内容setText(CharSequence text);设置文本标签的文本内容setTextSize(float);设置文本标签的文本大小setTextColor(int color);设置文本标签的文本颜色    其常用的XML文件元素属性见表3-4。表3-4 文本标签(TextView)常用的XML文件元素属性元 素 属 性说    明android:id文本标签标识android:layout_width文本标签(TextView)的宽度,通常取值”fill_parent”(屏幕宽度)或以像素为单位pt的固定值android:layout_height文本标签(TextView)的高度,通常取值”wrap_content”(文本的高)或以像素px为单位的固定值android:text文本标签(TextView)的文本内容android:textSize文本标签(TextView)的文本大小    【例3-1】设计一个文本标签组件程序。  创建名为Ex03_01的新项目,包名为com.ex03_01。打开系统自动生成的项目框架,需要设计的文件为:* 界面布局文件activity_main.xml;* 控制文件MainActivity.java;* 资源文件strings.xml。  (1)设计界面布局文件activity_main.xml。在界面布局文件activity_main.xml中加入文本标签TextView,设置文本标签组件的id属性,如图3.1所示。  activity_main.xml代码如下:       1      2  android:layout_width=”fill_parent”     4  android:layout_height=”fill_parent”     5  android:orientation=”vertical” >     6        android:id=”@ id/textView1″     8      android:layout_width=”fill_parent”     9      android:layout_height=”wrap_content”     10      android:text=”@string/hello” />     11   
图3.1  在界面布局中设置文本标签  (2)设计控制文件MainActivity.java。在控制文件MainActivity.java中添加文本标签组件,并将界面布局文件中所定义的文本标签元素属性值赋给文本标签,与界面布局文件中的文本标签建立关联。程序代码如下:       1 package com.ex03_01;     2 import android.app.Activity;     3 import android.os.Bundle;     4 import android.graphics.Color;           5 import android.widget.TextView;          6     7 public class MainActivity extends Activity      8 {     9  private TextView  txt;              10   public void onCreate(Bundle savedInstanceState)     11   {     12     super.onCreate(savedInstanceState);     13     setContentView(R.layout.activity_main);     14     txt=(TextView)findViewById(R.id.textView1);      15     txt.setTextColor(Color.WHITE);        16   }     17 }    (3)设计资源文件strings.xml。修改资源文件strings.xml中属性为”hello”的元素项的文本内容:       1      2      3    n    荷塘月色     4                       n 剪一段时光缓缓流淌,      5                       n 流进了月色中微微荡漾,     6                                n 弹一首小荷淡淡的香,     7                                n 美丽的琴音就落在我身旁.     8         9    Ex03_01     10     保存项目,配置应用程序的运行参数。程序的运行结果如图3.2所示。
图3.2 文本标签3.2.2  按钮  按钮(Button)用于处理人机交互事件,在一般应用程序中经常会用到。由于按钮是文本标签(TextView)的子类,其继承关系如图3.3所示。按钮继承了文本标签的所有方法和属性。  按钮在程序设计中常用的方式是实现OnClickListener监听接口,当单击按钮时,通过OnClickListener监听接口触发onClick()事件,实现用户需要的功能。OnClickListener接口有一个onClick()方法,在按钮实现OnClickListener接口时,一定要重写这个方法。  按钮调用OnClickListener接口对象的方法如下:       按钮对象.setOnClickListener(OnClickListener对象);    【例3-2】编写程序,实现单击按钮页面标题及文本标签的文字内容发生变化的功能,如图3.4所示。
                                 单击按钮前                 单击按钮后图3.4 单击按钮后,文本标签的文字内容发生变化  创建名为Ex03_02的新项目,包名为com.ex03_02。  (1)设计界面布局文件activity_main.xml。在界面布局文件中添加一个按钮,将其id设置为button1。其代码如下:       1      2     android:layout_width=”fill_parent”     4     android:layout_height=”fill_parent”     5     android:orientation=”vertical” >     6          11           16     (2)设计控制文件MainActivity.java。在控制文件MainActivity.java中设计一个实现按钮监听接口的内部类mClick,当单击按钮时,触发onClick()事件。其代码如下:       1 package com.ex03_02;     2 import android.app.Activity;     3 import android.os.Bundle;     4 import android.view.View;     5 import android.view.View.OnClickListener;     6 import android.widget.TextView;     7 import android.widget.Button;     8     9 public class MainActivity extends Activity     10 {     11    private TextView txt;      12    private Button btn;     13    public void onCreate(Bundle savedInstanceState)     14    {     15         super.onCreate(savedInstanceState);     16         setContentView(R.layout.activity_main);     17         txt=(TextView) findViewById(R.id.textView1);      18         btn=(Button)findViewById(R.id.button1);     19         btn.setOnClickListener(new mClick());      20    }      21         class mClick implements OnClickListener       22         {     23        public void onClick(View v)     24          {     25        MainActivity.this.setTitle(“改变标题”);     26                 txt.setText(R.string.newStr);       27             }     28         }     29 }    (3)设计资源文件strings.xml,其代码如下:       1      2      3      Hello World, 这是Ex03_02的界面!     4      Ex03_02     5      单击我!     6      改变了文本标签的内容     7     【例?3-3】编写程序,实现单击按钮改变文本标签的文字及背景颜色的功能,如图?3.5所示。
图3.5 单击按钮后,文本标签的文字及背景颜色发生变化  本例题涉及颜色定义,Android系统在android.graphics.Color中定义了12种常见的颜色常数,其颜色常数见表3-5。表3-5  常见的颜色常数颜 色 常 数十六进制数色码意    义Color.BLACK0xff000000黑色Color.BLUE0xff00ff00蓝色Color.CYAN0xff00ffff青绿色Color.DKGRAY0xff444444灰黑色Color.GRAY0xff888888灰色Color.GREEN0xff0000ff绿色Color.LTGRAY0xffcccccc浅灰色Color.MAGENTA0xffff00ff红紫色Color.RED0xffff0000红色Color.TRANSPARENT0x00ffffff透明Color.WHITE0xffffffff白色Color.YELLOW0xffffff00黄色    创建名为Ex03_03的新项目,包名为com.ex03_03。  (1)设计界面布局文件activity_main.xml。  在XML文件中表示颜色的方法有多种。* #RGB:用3位十六进制数分别表示红、绿、蓝颜色。* #ARGB:用4位十六进制数分别表示透明度,以及红、绿、蓝颜色。* #RRGGBB:用6位十六进制数分别表示红、绿、蓝颜色。* #AARRGGBB:用8位十六进制数分别表示透明度,以及红、绿、蓝颜色。  下面程序是用8位十六进制数表示透明度,以及红、绿、蓝颜色。       1      2    android:layout_width=”fill_parent”     4    android:layout_height=”fill_parent”     5    android:background=”#ff7f7c”     6    android:orientation=”vertical” >     7            android:id=”@ id/textView1″     9        android:layout_width=”fill_parent”     10        android:layout_height=”wrap_content”     11        android:textColor=”#ff000000″     12       android:text=”@string/hello” />     13        (2)设计控制文件MainActivity.java,其代码如下:       1 package com.ex03_03;     2 import android.app.Activity;     3 import android.graphics.Color;     4 import android.os.Bundle;     5 import android.view.View;     6 import android.view.View.OnClickListener;     7 import android.widget.Button;     8 import android.widget.TextView;     9     10 public class MainActivity extends Activity      11 {     12   /** Called when the activity is first created. */     13   private TextView txt;     14   private Button btn;     15 @Override     16   public void onCreate(Bundle savedInstanceState)     17   {     18        super.onCreate(savedInstanceState);     19        setContentView(R.layout.activity_main);     20        btn=(Button)findViewById(R.id.button1);     21        txt=(TextView)findViewById(R.id.textView1);     22        btn.setOnClickListener(new click());     23    }     24   class click implements OnClickListener     25    {     26       public void onClick(View v)     27        {     28            int BLACK=0xffcccccc;     29         txt.setText(“改变了文字及背景颜色”);      30         txt.setTextColor(Color.YELLOW);         31            txt.setBackgroundColor(BLACK);     32        }     33   }     34 }    (3)设计资源文件strings.xml,其代码如下:       1      2      3    Hello World, MainActivity!     4    Ex03_03     5    单击我,改变文字背景颜色     6 3.3  文本编辑框  文本编辑框(EditText)用于接收用户输入的文本信息内容。文本编辑框继承于文本标签,其继承关系如图3.6所示。  文本编辑框主要继承文本标签的方法,其常用方法见表3-6。表3-6  文本编辑框(EditText)的常用方法方    法功    能EditText(Context context)构造方法,创建文本编辑框对象getText()获取文本编辑框的文本内容setText(CharSequence text)设置文本编辑框的文本内容    其常用的XML文件元素属性见表3-7。表3-7 文本编辑框(EditText)常用的XML文件元素属性元 素 属 性说    明android:editable设置是否可编辑,其值为true或falseandroid:numeric设置TextView 只能输入数字,其参数默认值为falseandroid:password设置密码输入,字符显示为圆点,其值为true或falseandroid:phoneNumber设置只能输入电话号码,其值为true或false    定义框EditText元素的android:numeric属性,其取值只能是下列常量(可由“|”连接多个常量)。* integer:可以输入数值。* signed:可以输入带符号的数值。* decimal:可以输入带小数点的数值。  【例3-4】设计一个密码验证程序,其运行界面如图3.7所示。
图3.7  文本编辑框  创建名为Ex03_04的新项目,包名为com.ex03_04。  (1)设计界面布局文件activity_main.xml。在界面布局中,设置一个编辑框,用于输入密码,再设置一个按钮,判断密码是否正确,设置两个文本标签,其中一个显示提示信息“请输入密码”,另一个显示密码正确与否。其代码如下:       1      2    android:layout_width=”fill_parent”     4    android:layout_height=”fill_parent”     5    android:orientation=”vertical” >     ?         6        />     ?         15        ?           23          ?           30          38   (2)设计控制文件MainActivity.java。在控制文件MainActivity.java中,主要是设计按钮的监听事件,当单击按钮后,从文本编辑框中获取输入的文本内容,与密码“abc123”进行比较。其代码如下:       1 package com.ex03_04;     2 import android.app.Activity;     3 import android.os.Bundle;     4 import android.view.View;     5 import android.view.View.OnClickListener;     6 import android.widget.EditText;     7 import android.widget.TextView;     8 import android.widget.Button;     9 public class MainActivity extends Activity      10 {     11     private EditText edit;      12     private TextView txt1,txt2;     13     private Button  mButton01;     14    @Override     15    public void onCreate(Bundle savedInstanceState)      16     {     17          super.onCreate(savedInstanceState);     18          setContentView(R.layout.activity_main);     19          txt1=(TextView)findViewById(R.id.myTextView01);     20          txt2=(TextView)findViewById(R.id.myTextView02);       21          edit=(EditText)findViewById(R.id.myEditText);     22          mButton01=(Button)findViewById(R.id.myButton);     23          mButton01.setOnClickListener(new mClick());     24     }     25     class mClick implements OnClickListener        26     {     27     public void onClick(View v)     28       {     29       String passwd;     30       passwd=edit.getText().toString();         31       if(passwd.equals(“abc123”))               32       txt2.setText(“欢迎进入快乐大本营!”);       33       else     34   txt2.setText(“非法用户,请立刻离开!”);       35       }     36     }     37 }3.4 Android布局管理  Android系统按照MVC(Model-View-Controller)设计模式,将应用程序的界面设计与功能控制设计分离,从而可以单独地修改用户界面,而不需要去修改程序代码。应用程序的用户界面通过XML定义组件布局来实现。  Android系统的布局管理是指在XML布局文件中设置组件的大小、间距、排列及对齐方式等。Android系统中常见的布局方式有5种,它们分别是LinearLayout、FrameLayout、TableLayout、RelativeLayout、AbsoluteLayout。3.4.1  布局文件的规范与重要属性  1.布局文件的规范  Android系统应用程序的XML布局文件有以下规范:  (1)布局文件作为应用项目的资源存放在reslayout目录下,其扩展名为.xml。  (2)布局文件的根结点通常是一个布局方式,在根结点内可以添加组件作为结点。  (3)布局文件的根结点必须包含一个命名空间:       xmlns:android=”http://schemas.android.com/apk/res/android”    (4)如果要在实现控制功能的Java程序中控制界面中的组件,则必须为界面布局文件中的组件定义一个ID,其定义格式为:       android:id=”@ id/”    2.布局文件的重要属性  在一个界面布局中会有很多元素,这些元素的大小和位置由其属性决定。下面简述布局文件中的几个重要属性。  1)设置组件大小的属性* wrap_content:根据组件内容的大小来决定组件的大小。* fill_parent(或match_parent):使组件填充父组件容器的所有空间。  2)设置组件大小的单位* px(pixels):像素,即屏幕上的发光点。* dp(或dip,即device independent pixels):设备独立像素,一种支持多分辨率设备的抽象单位,和硬件相关。* sp(scaled pixels):比例像素,设置字体大小。  3)设置组件的对齐方式  在布局文件中,由android:gravity属性控制组件的对齐方式,其属性值有上(top)、下(bottom)、左(left)、右(right)、水平方向居中(center_horizontal)、垂直方向居中(center_vertical)等。3.4.2  常见的布局方式  1.线性布局  线性布局(LinearLayout)是Android系统中常用的布局方式之一,它将组件按照水平或垂直方向排列。在XML布局文件中,由根元素LinearLayout来标识线性布局。  在布局文件中,由android:orientation属性来控制排列方向,其属性值有水平(horizontal)和垂直(vertical)两种。* 设置线性布局为水平方向:       android:orientation=”horizontal”  * 设置线性布局为垂直方向:       android:orientation=”vertical”    【例3-5】线性布局应用示例。  创建名为Ex03_05的新项目,包名为com.ex03_05。生成项目框架后,修改界面布局文件activity_main.xml的代码如下:       1      2  android:layout_width=”fill_parent”     4  android:layout_height=”fill_parent”     5  android:orientation=”vertical” >     6       7      程序的运行结果如图3.8(a)所示。如果将代码中的第5行android:orientation=”vertical”(垂直方向的线性布局)更改为android:orientation=”horizontal”(水平方向的线性布局),则运行结果如图3.8(b)所示。
图3.8 线性布局示例  2.帧布局  帧布局FrameLayout是将组件放置到左上角位置,当添加多个组件时,后面的组件将遮盖之前的组件。在XML布局文件中,由根元素FrameLayout来标识帧布局。  【例3-6】帧布局应用示例。  创建名为Ex03_06的新项目,包名为com.ex03_06。生成项目框架后,将事先准备的图像文件img.png复制到resdrawable-hdpi目录下。  (1)设计界面布局文件activity_main.xml,其代码如下:       1      2 xmlns:android=”http://schemas.android.com/apk/res/android”     4    android:layout_width=”fill_parent”     5    android:layout_height=”fill_parent”>     6          android:id=”@ id/mImageView”     8       android:layout_width=”60px”     9       android:layout_height=”wrap_content”     10    />     11          android:layout_width=”wrap_content”     13       android:layout_height=”wrap_content”     14       android:text=”快乐大本营”      15       android:textSize=”18sp”     16    />     17   (2)设计控制文件MainActivity.java,其代码如下:       1 package com.ex03_06;     2 import android.app.Activity;     3 import android.os.Bundle;     4 import android.widget.ImageView;     5 public class MainActivity extends Activity      6 {     7    ImageView imageview;     8    @Override     9    public void onCreate(Bundle savedInstanceState)      10    {     11     super.onCreate(savedInstanceState);     12     setContentView(R.layout.activity_main);     13     imageview=(ImageView) this.findViewById(R.id.mImageView);     14     imageview.setImageResource(R.drawable.img);     15    }     16 }    程序运行结果如图?3.9?所示,可见在界面布局文件中添加的文本框组件遮挡了之前的图像组件。  3.表格布局  表格布局(TableLayout)是将页面划分成由行、列构成的单元格。在XML布局文件中,由根元素TableLayout来标识表格布局。  表格的列数由android:shrinkColumns定义。例如,android:shrinkColumns = “0, 1, 2″,表示表格为3列,其列编号为第1、2、3。  表格的行由?定义。组件放置到哪一列,由android:layout_column指定列编号。  【例3-7】表格布局应用示例。设计一个3行4列的表格布局,组件安排如图3.10所示。                             ?图3.9 帧布局示例                  图3.10 3行4列的表格布局  创建名为Ex03_07的新项目,包名为com.ex03_07。生成项目框架后,将准备好的图像文件img1.png、img2.png、img3.png、img4.png、img5.png复制到resdrawable-hdpi目录下。  (1)设计表格的界面布局文件activity_main.xml。在图3.10所示的界面布局中,由于有显示图片的空白单元格,这时,可以使用文本标签组件将其文字内容设置为空,这样显示出来的就是空白的单元格了。该文件的代码如下:       1      2    android:layout_width=”fill_parent”     4    android:layout_height=”fill_parent”>     5           6        android:layout_width=”wrap_content ”     8      android:layout_height=”wrap_content”     9      android:src=”@drawable/img1″ />      10        android:layout_width=”wrap_content ”     12      android:layout_height=”wrap_content”     13      android:src=”@drawable/img2″ />      14         15           16        android:id=”@ id/textView1″     18      android:layout_width=”wrap_content”     19      android:layout_height=”wrap_content” />     20        android:layout_width=”wrap_content ”     22      android:layout_height=”wrap_content”     23      android:src=”@drawable/img3″ />      24       android:layout_width=” wrap_content ”     26     android:layout_height=”wrap_content”      27     android:src=”@drawable/img4″ />      28         29           30        android:id=”@ id/textView2″     32      android:layout_width=”wrap_content”     33      android:layout_height=”wrap_content” />     34          android:id=”@ id/textView3″     36      android:layout_width=”wrap_content”     37      android:layout_height=”wrap_content” />     38          android:id=”@ id/textView4″     40      android:layout_width=”wrap_content”     41      android:layout_height=”wrap_content” />     42         android:layout_width=”wrap_content ”     44     android:layout_height=”wrap_content”     45     android:src=”@drawable/img5″ />      46          47   (2)设计控制文件MainActivity.java,其代码如下:       1 package com.ex03_07;     2 import android.app.Activity;     3 import android.os.Bundle;     4 import android.widget.ImageView;     5 public class MainActivity extends Activity      6 {     7    ImageView img1, img2, img3, img4, img5;     8    @Override     9    public void onCreate(Bundle savedInstanceState)      10    {     11     super.onCreate(savedInstanceState);     12     setContentView(R.layout.activity_main);     13     img1=(ImageView)this.findViewById(R.id.mImageView1);     14     img2=(ImageView)this.findViewById(R.id.mImageView2);      15     img3=(ImageView)this.findViewById(R.id.mImageView3);     16     img4=(ImageView)this.findViewById(R.id.mImageView4);     17     img5=(ImageView)this.findViewById(R.id.mImageView5);     18     img1.setImageResource(R.drawable.img1);     19     img2.setImageResource(R.drawable.img2);     20     img3.setImageResource(R.drawable.img3);     21     img4.setImageResource(R.drawable.img4);     22     img5.setImageResource(R.drawable.img5);     23    }     24 }    4.相对布局  相对布局(RelativeLayout)是采用相对其他组件的位置的布局方式。在相对布局中,通过指定id关联其他组件,以右对齐、上对齐、下对齐或居中对齐等方式来排列组件。  在XML布局文件中,由根元素RelativeLayout来标识相对布局。相对布局由于属性较多,下面简单介绍几种常用属性。  设置该控件与父元素右对齐:       android:layout_alignParentRight=”true”    设置该控件在id为re_edit_0控件的下方:       android:layout_below=”@id/re_edit_0″    设置该控件在id为re_image_0控件的左边:       android:layout_toLeftOf=”@id/re_iamge_0″    设置当前控件与id为name控件的上方对齐:       android:layout_alignTop=”@id/name”       设置偏移的像素值:       android:layout_marginRight=”30dip”    该布局方式的属性较多,下面简单归纳一下:* 类:属性值为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  * 第三类:属性值为具体的像素值,如30dp。       android:layout_marginBottom     android:layout_marginLeft     android:layout_marginRight     android:layout_marginTop    【例3-8】应用相对布局设计一个组件排列如图3.11所示的应用程序。
图3.11 应用相对布局设计组件排列  创建名为Ex03_08的新项目,包名为com.ex03_08。生成项目框架后,修改界面布局文件activity_main.xml的代码如下:       1      2    android:layout_width=”fill_parent”     4    android:layout_height=”fill_parent”>     5         android:id=”@ id/label”     7      android:layout_width=”fill_parent”     8      android:layout_height=”wrap_content”     9      android:textSize=”24sp”     10      android:text=”相对布局”/>     11        android:id=”@ id/edit”     13     android:layout_width=”fill_parent”     14     android:layout_height=”wrap_content”     15     android:background=”@android:drawable/editbox_background”     16     android:layout_below=”@id/label”/>      17        程序的运行结果如图3.12所示。  5.布局  布局(AbsoluteLayout)是在界面布局文件中指定组件在屏幕上的坐标位置。在XML布局文件中,由根元素AbsoluteLayout来标识布局。  如果要正确应用布局安排组件的位置,需要了解Android图形界面的坐标系统。  在一个二维的Android图形界面坐标系中,该坐标的原点在组件的左上角,坐标的单位是像素。X轴在水平方向上从左至右,Y轴在垂直方向上从上向下,如图3.13所示。  【例3-9】布局示例。  设一个文本标签在屏幕上的坐标为(40, 150),修改界面布局文件activity_main.xml的代码如下:       1      2      6          12     程序的运行结果如图3.14所示。              ?                 图3.13 坐标系统                               图3.14 布局3.5  进度条和选项按钮3.5.1  进度条  进度条(ProgressBar)能以形象地图示方式直观地显示某个过程的进度。进度条的常用属性和方法见表3-8。表3-8  进度条(ProgressBar)的常用属性和方法属    性方    法功    能android:maxsetMax(int max)设置进度条的变化范围为0~maxandroid:progresssetProgress(int progress)设置进度条的当前值(初始值)android:progressbyincrementProgressBy(int diff)设置进度条的变化步长值  【例3-10】进度条应用示例。  在界面设计中安排一个进度条组件,并设置两个按钮,用于控制进度条的进度变化,如图3.15所示。  程序设计步骤:  (1)在界面布局文件中声明ProgressBar。  (2)在Activity中获得ProgressBar实例。  (3)调用ProgressBar的incrementProgressBy()方法增加或减少进度。  程序代码:  (1)设计界面布局文件activity_main.xml的代码如下:       1      2    android:layout_width=”fill_parent”     4    android:layout_height=”fill_parent”     5    android:orientation=”vertical” >     6           android:id=”@ id/ProgressBar01″     8       style=”@android:style/Widget.ProgressBar.Horizontal”     9       android:layout_width=”250dp”     10      android:layout_height=”wrap_content”     11       android:max=”200″     12       android:progress=”50″ >     13      14     (2)在控制文件MainActivity.java中添加按钮的事件处理代码:       1 package com.ex03_10;     2 import android.app.Activity;     3 import android.os.Bundle;     4 import android.view.View;     5 import android.view.View.OnClickListener;     6 import android.widget.Button;     7 import android.widget.ProgressBar;          8 public class MainActivity extends Activity     9 {     10 ProgressBar progressBar;     11 Button btn1,btn2;     12  @Override     13 public void onCreate(Bundle savedInstanceState)     14 {     15  super.onCreate(savedInstanceState);     16  setContentView(R.layout.activity_main);     17  progressBar=(ProgressBar)findViewById(R.id.ProgressBar01);     18  btn1=(Button)findViewById(R.id.button1);     19  btn2=(Button)findViewById(R.id.button2);     20  btn1.setOnClickListener(new click1());     21  btn2.setOnClickListener(new click2());            22 }     23 class click1 implements OnClickListener     24 {     25     public void onClick(View v)     26       { progressBar.incrementProgressBy(5);  }     27  }     28 class click2 implements OnClickListener     29  {     30       public void onClick(View v)     31        { progressBar.incrementProgressBy(-5);  }     32  }     33 }  3.5.2  选项按钮  1.复选框  复选框(CheckBox)用于多项选择,用户可以一次性选择多个选项。复选框是按钮的子类,其属性和方法继承于按钮。复选框的常用方法见表3-9。表3-9 复选框(CheckBox)的常用方法方    法功    能isChecked()判断选项是否被选中getText()获取复选框的文本内容    【例3-11】复选框应用示例。  在界面设计中,安排3个复选框和一个普通按钮,选择选项后,单击按钮,在文本标签中显示所选中的选项文本内容,如图3.16所示。                                           图3.16  复选框应用示例  程序设计步骤:  (1)在界面布局文件中声明复选框。  (2)在Activity中获得复选框实例。  (3)调用CheckBox的isChecked()方法判断该选项是否被选中。如果被选中,则调用getText()方法获取选项的文本内容。  程序代码:  (1)设计界面布局文件activity_main.xml的代码如下:       1      2    android:layout_width=”fill_parent”     4    android:layout_height=”fill_parent”     5    android:orientation=”vertical” >     6          android:layout_width=”fill_parent”     8        android:layout_height=”wrap_content”     9        android:text=”@string/hello”      10        android:textSize=”20sp”/>     11           android:id=”@ id/check1″     13       android:layout_width=”fill_parent”     14       android:layout_height=”wrap_content”     15       android:textSize=”20sp”     16       android:text=”@string/one” />             17           android:id=”@ id/check2″     19       android:layout_width=”fill_parent”     20       android:layout_height=”wrap_content”     21       android:textSize=”20sp”     22       android:text=”@string/two” />       23           android:id=”@ id/check3″     25       android:layout_width=”fill_parent”     26       android:layout_height=”wrap_content”     27       android:textSize=”20sp”     28       android:text=”@string/three” />         29        (2)在strings.xml文件中设置要使用的字符串,代码如下:       1      2      3     请选择播放歌曲:     4     Ex03_11     5     荷塘月色—-凤凰传奇     6     白狐—-陈瑞     7     青花瓷—-周杰伦     8     获取选项值     9     (3)设计控制文件MainActivity.java。在控制文件MainActivity.java中,建立组件与界面布局文件中相关组件的关联,并编写按钮的事件处理代码:       1 package com.ex03_11;     2 import android.app.Activity;     3 import android.os.Bundle;     4 import android.view.View;     5 import android.view.View.OnClickListener;     6 import android.widget.Button;     7 import android.widget.CheckBox;     8 import android.widget.TextView;     9 public class MainActivity extends Activity      10 {     11     CheckBox ch1,ch2,ch3;     12     Button okBtn;     13     TextView txt;     14     @Override     15   public void onCreate(Bundle savedInstanceState)      16   {     17    super.onCreate(savedInstanceState);     18    setContentView(R.layout.activity_main);     19    ch1=(CheckBox)findViewById(R.id.check1);     20    ch2=(CheckBox)findViewById(R.id.check2);             21    ch3=(CheckBox)findViewById(R.id.check3);             22    okBtn=(Button)findViewById(R.id.button);     23    txt=(TextView)findViewById(R.id.textView2);     24    okBtn.setOnClickListener(new click());     25    }     26    class click implements OnClickListener     27    {     28    public void onClick(View v)     29    {     30       String str=””;     31       if(ch1.isChecked()) str=str “n” ch1.getText();     32       if(ch2.isChecked()) str=str “n” ch2.getText();     33       if(ch3.isChecked()) str=str “n” ch3.getText();     34       txt.setText(“您选择了:” str);     35    }     36  }     37 }    2.单选组件与单选按钮  单选组件(RadioGroup)用于多项选择中只允许任选其中一项的情形。单选组件由        一组单选按钮(RadioButton)组成。单选按钮是按钮的子类。单选按钮的常用方法见      表3-10。表3-10  单选按钮(RadioButton)的常用方法方    法功    能isChecked();判断选项是否被选中getText();获取单选按钮的文本内容    【例3-12】单选按钮应用示例。  在界面设计中,安排两个单选按钮、一个文本编辑框和一个普通按钮,选择选项后,单击按钮,在文本标签中显示文本编辑框及选中选项的文本内容,如图3.17所示。  程序设计步骤:  (1)在界面布局文件中声明单选组件和单选按钮。  (2)在Activity中获得单选按钮实例。  (3)调用RadioButton的isChecked()方法判断该选项是否被选中。如果被选中,则调用getText()方法获取选项的文本    内容。  程序代码:  (1)设计界面布局文件activity_main.xml的代码如下:       1      2    android:layout_width=”fill_parent”     4    android:layout_height=”fill_parent”     5    android:orientation=”vertical” >     6           android:layout_width=”fill_parent”     8       android:layout_height=”wrap_content”     9       android:textSize=”20sp”     10       android:text=”@string/hello” />     11           android:id=”@ id/edit1″     13       android:layout_width=”fill_parent”     14       android:layout_height=”wrap_content”     15       android:inputType=”text”     16       android:textSize=”20sp” />     17           android:layout_width=”fill_parent”     19       android:layout_height=”wrap_content”>     20           android:id=”@ id/boy01″     22       android:text=”@string/boy”/>     23           android:id=”@ id/girl01″     25       android:text=”@string/girl” />     26          27        (2)在strings.xml文件中设置要使用的字符串,代码如下:       1      2      3      请输入您的姓名:     4      Ex03_12     5      男     6      女     7     (3)设计控制文件MainActivity.java。在控制文件MainActivity.java中,建立组件与界面布局文件中相关组件的关联,并编写按钮的事件处理代码:       1 package com.ex03_12;     2 import android.app.Activity;     3 import android.os.Bundle;     4 import android.view.View;     5 import android.view.View.OnClickListener;     6 import android.widget.Button;     7 import android.widget.EditText;     8 import android.widget.RadioButton;     9 import android.widget.TextView;     10 public class MainActivity extends Activity      11 {     12 Button okBtn;     13 EditText edit;     14 TextView txt;     15 RadioButton r1, r2;     16 @Override     17 public void onCreate(Bundle savedInstanceState)      18 {     19     super.onCreate(savedInstanceState);     20     setContentView(R.layout.activity_main);     21     edit=(EditText)findViewById(R.id.edit1);     22     okBtn=(Button)findViewById(R.id.myButton);     23     txt=(TextView)findViewById(R.id.text02);     24     r1=(RadioButton)findViewById(R.id.boy01);     25     r2=(RadioButton)findViewById(R.id.girl01);     26     okBtn.setOnClickListener(new mClick());     27 }     28 class mClick implements OnClickListener      29 {     30   public void onClick(View v)     31    {     32      CharSequence str=””,name=””;     33      name=edit.getText();     34      if(r1.isChecked())     35         str=r1.getText();     36      if(r2.isChecked())     37         str=r2.getText();     38      txt.setText(“您输入的信息为: n 姓名 ” name “t 性别 ” str);     39   }     40 }     41 }  3.6 图像显示与画廊组件3.6.1  图像显示ImageView类  ImageView类用于显示图片或图标等图像资源,并提供图像缩放及着色(渲染)等图像处理功能。  ImageView类的常用属性和对应方法见表3-11。表3-11  ImageView类的常用属性和对应方法元 素 属 性对 应 方 法说    明android:maxHeightsetMaxHeight(int)为显示图像提供高度的可选参数android:maxWidthsetMaxWidth(int)为显示图像提供宽度的可选参数android:ScaleTypesetScaleType(ImageView.ScaleType)控制图像适合 ImageView大小的显示方式android:srcsetImageResource(int)获取图像文件的路径    ImageView类的ScaleType属性值见表3-12。表3-12  ImageView类的ScaleType属性值ScaleType属性值常量值说    明matrix0用矩阵来绘图fitXY1拉伸图片(不按宽高比例)以填充View的宽高fitStart2按比例拉伸图片,拉伸后图片的高度为View的高度,且显示在View的左边fitCenter3按比例拉伸图片,拉伸后图片的高度为View的高度,且显示在View的中间fitEnd4按比例拉伸图片,拉伸后图片的高度为View的高度,且显示在View的右边center5按原图大小显示图片,但图片的宽高大于View的宽高时,截取图片中间部分显示centerCrop6按比例放大原图,直至等于某边View的宽高显示centerInside7当原图宽高等于View的宽高时,按原图大小居中显示,否则将原图缩放至View的宽高居中显示    【例3-13】显示图片示例。  程序设计步骤:  (1)将事先准备好的图片序列img1.jpg、img2.jpg、…、img6.jpg复制到resdrawable-hdpi目录下。  (2)在布局文件中声明图像显示组件ImageView。  (3)在Activity中获得相关组件实例。  (4)通过触发按钮事件,调用OnClickListener接口的onClick()方法显示图像。  程序代码:  (1)设计界面布局文件activity_main.xml。在界面设计中,安排两个按钮和一个图像显示组件ImageView,单击按钮,可以翻阅浏览图片。布局设计如图3.18所示。
图3.18  布局设计  其代码如下:       1      2 android:layout_width=”fill_parent”     4 android:layout_height=”fill_parent”     5 android:gravity=”center|fill”     6 android:orientation=”vertical” >     7 android:layout_width=”fill_parent”     9 android:layout_height=”wrap_content”     10 android:gravity=”center” >     11 android:id=”@ id/img”     13 android:layout_width=”240dp”     14 android:layout_height=”240dp”     15 android:layout_centerVertical=”true”     16 android:src=”@drawable/img1″ />     17       18    android:layout_width=”fill_parent”     20  android:layout_height=”wrap_content” >     21       31     (2)设计控制文件MainActivity.java。在控制文件MainActivity.java中,建立组件与界面布局文件中相关组件的关联,并编写按钮的事件处理代码:       1 package com.ex03_13;     2 import android.app.Activity;     3 import android.os.Bundle;     4 import android.view.View;     5 import android.view.View.OnClickListener;     6 import android.widget.Button;     7 import android.widget.ImageView;     8 public class MainActivity extends Activity {     9 ImageView img;     10 Button btn_last, btn_next;     11 //存放图片id的int数组     12 private int[] imgs={     13 R.drawable.img1,     14 R.drawable.img2,     15 R.drawable.img3,     16 R.drawable.img4,     17 R.drawable.img5,     18 R.drawable.img6 };     19 int index=1;     20 @Override     21 public void onCreate(Bundle savedInstanceState) {     22 super.onCreate(savedInstanceState);     23 setContentView(R.layout.activity_main);     24 img=(ImageView)findViewById(R.id.img);     25 btn_last=(Button)findViewById(R.id.btn_last);     26 btn_next=(Button)findViewById(R.id.btn_next);     27 btn_last.setOnClickListener(new mClick());     28 btn_next.setOnClickListener(new mClick());     29  }        30 class mClick implements OnClickListener       31 {     32   public void onClick(View v)     33   {     34    if(v==btn_last)     35      {       36      if(index>0 && index      37      {     38          index–;            39          img.setImageResource(imgs[index]);        40      }  else  {index=imgs.length 1;  }       41      }      42      if(v==btn_next)        43      {     44          if(index>0&&index }       52 }      程序的运行结果如图3.19所示。
图3.19  图像显示示例3.6.2  画廊组件Gallery与图片切换器ImageSwitcher   Gallery是Android中控制图片展示的组件,它可以横向显示一列图像。Gallery的常用属性及方法见表3-13。表3-13  Gallery的常用属性及方法元 素 属 性对 应 方 法说    明android:spacingsetSpacing(int)设置图片之间的间距,以像素为单位android: unselectedAlphasetUnselectedAlpha(float)设置未选中图片的透明度(Alpha) android: animationDurationset AnimationDuration(int)设置布局变化时动画转换所需的时间(毫秒级),仅在动画开始时计时
onTouchEvent(MotionEvent event)触摸屏幕时触发MotionEvent事件
onDown(MotionEvent e)按下屏幕时触发MotionEvent事件    Gallery经常与图片切换器ImageSwitcher配合使用,用图片切换器ImageSwitcher展示图片效果。使用ImageSwitcher时必须用ViewFactory接口的makeView()方法创建视图。ImageSwitcher的常用方法见表3-14。表3-14  ImageSwitcher的常用方法方    法说    明setInAnimation (Animation inAnimation)  设置动画对象进入屏幕的方式setOutAnimation(Animation outAnimation)设置动画对象退出屏幕的方式setImageResource(int resid)设置显示的初始图片showNext()显示下一个视图showPrevious()显示前一个视图    【例3-14】画廊展示图片示例。  在界面设计中,安排一个画廊组件Gallery和一个图片切换器ImageSwitcher,单击画廊中的小图片,可以在图片切换器中显示放大的图片,如图3.20所示。              图3.20  画廊展示图片示例  程序设计步骤:  (1)在界面布局文件中声明画廊组件Gallery和图片切换器ImageSwitcher,采用表格布局。  (2)把事先准备好的图片文件img1.jpg、img2.jpg、…、img8.jpg复制到项目的资源目录resdrawable-hdpi中,在Activity中创建一个图像文件数组imgs[],其数组元素为图片文件。  (3)在Activity中创建画廊组件Gallery和图片切换器ImageSwitcher组件的实例对象。  (4)在Activity中创建一个实现ViewFactory接口的内部类,重写makeView()方法建立imageView图像视图。图片切换器ImageSwitcher通过该图像视图显示放大的图片。  (5)在Activity中创建一个BaseAdapter适配器,用于安排放在画廊Gallery中的图片文件及显示方式。  程序代码:  (1)设计界面布局文件activity_main.xml的代码如下:       1      2 ??android:layout_width=”wrap_content”      4 ??android:layout_height=”wrap_content”      5 ??xmlns:android=”http://schemas.android.com/apk/res/android”      6 ??android:layout_gravity=”center”>     7 ??     12 ??      android:layout_width=”wrap_content”      14      android:layout_height=”wrap_content”     15      android:spacing=”10dp”/>       16 ??      android:layout_width=”wrap_content”      18      android:layout_height=”wrap_content” >     19 ?? ImageSwitcher>     20 /TableLayout>    (2)设计控制文件MainActivity.java。在控制文件MainActivity.java中创建图像文件序列数组,并编写按钮的事件处理代码。通过ViewFactory接口建立imageView图像视图,并实现OnItemSelectedListener接口来选择图片。其代码如下:       1 package com.ex03_14;     2 import android.app.Activity;     3 import android.os.Bundle;     4 import android.view.View;     5 import android.view.ViewGroup;     6 import android.view.animation.AnimationUtils;     7 import android.widget.AdapterView;     8 import android.widget.BaseAdapter;     9 import android.widget.Gallery;     10 import android.widget.ImageSwitcher;     11 import android.widget.ImageView;     12 import android.widget.AdapterView.OnItemSelectedListener;     13 import android.widget.ViewSwitcher.ViewFactory;     14      15 public class MainActivity extends Activity      16 {     17    private ImageSwitcher imageSwitcher;     18     Gallery gallery;     19     private int[] imgs={     20     R.drawable.img1,     21     R.drawable.img2,     22     R.drawable.img3,     23     R.drawable.img4,     24     R.drawable.img5,     25     R.drawable.img6,     26     R.drawable.img7,     27     R.drawable.img8,     28     };     29         30 @Override     31 public void onCreate(Bundle savedInstanceState)     32 {       33  super.onCreate(savedInstanceState);     34  setContentView(R.layout.activity_main);     35  imageSwitcher=(ImageSwitcher)findViewById(R.id.ImageSwitcher01);     36  imageSwitcher.setFactory(new viewFactory());     37  imageSwitcher.setInAnimation(AnimationUtils     38       .loadAnimation(this, android.R.anim.fade_in) );     39  imageSwitcher.setOutAnimation(AnimationUtils     40       .loadAnimation(this, android.R.anim.fade_out));     41  imageSwitcher.setImageResource(R.drawable.img1);     42  gallery=(Gallery)findViewById(R.id.Gallery01);     43   gallery.setOnItemSelectedListener(     44               new onItemSelectedListener());     45  gallery.setSpacing(10);      46  gallery.setAdapter(new baseAdapter());     47 }      48 //通过ViewFactory接口建立一个imageView图像视图     49 class viewFactory implements ViewFactory     50 {     51  @Override     52  public View makeView()     53   {     54    ImageView imageView=new ImageView(MainActivity.this);     55    imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);     56    return imageView;     57  }      58 }       59 //实现选项监听接口,获取选择的图片     60 class onItemSelectedListener  implements OnItemSelectedListener     61 {     62     @Override      63  public void onItemSelected(AdapterView> parent,     64                                   View view,int position, long id)      65  {     66        imageSwitcher.setImageResource(     67                           (int)gallery.getItemIdAtPosition(position));     68  }     69  @Override     70  public void onNothingSelected(AdapterView> arg0) { }     71 }     72 //设置一个适配器,安排放在画廊gallery中的图片文件及显示方式     73 class  baseAdapter extends BaseAdapter       74 {     75  //取得gallery内的照片数量     76  public int getCount()     77    {return imgs.length;}      78  public Object getItem(int position)     79    { return null; }      80  //取得gallery内选择的某一张图片文件     81  public long getItemId(int position)     82    { return imgs[position]; }      83  //将选择的图片放置在imageView,且设定显示方式为居中,大小为60?×?60     84  public View getView(int position, View convertView, ViewGroup parent)     85  {     86  ImageView imageView = new ImageView(MainActivity.this);     87  imageView.setImageResource(imgs[position]);     88  imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);     89  imageView.setLayoutParams(new Gallery.LayoutParams(60, 60));     90  return imageView;     91  }     92 }     93 }  3.7  消 息 提 示  在Android系统中,可以用Toast来显示帮助或提示消息。该提示消息以浮于应用程序之上的形式显示在屏幕上。因为它并不获得焦点,不会影响用户的其他操作,使用消息提示组件Toast的目的就是为了尽可能不中断用户操作,并使用户看到提供的信息内容。Toast类的常用方法见表3-15。表3-15  Toast类的常用方法常 用 方 法说    明Toast(Context context) Toast的构造方法,构造一个空的Toast对象makeText(Context context, CharSequence text, int duration)以特定时长显示文本内容,参数text为显示的文本,参数duration为显示时间,较长时间取值LENGTH_LONG,较短时间取值LENGTH_SHORTgetView()返回视图setDuration(int duration) 设置存续时间setView(View view) 设置要显示的视图setGravity(int gravity, int xOffset, int yOffset) 设置提示信息在屏幕上的显示位置setText(int resId) 更新makeText()方法所设置的文本内容show()显示提示信息LENGTH_LONG提示信息显示较长时间的常量LENGTH_SHORT提示信息显示较短时间的常量  【例3-15】消息提示Toast分别按默认方式、自定义方式和带图标方式显示的示例。  将事先准备好的图标文件icon.jpg复制到resdrawable-hdpi目录下,以作提示消息的图标之用。  (1)设计界面布局文件activity_main.xml。在界面设计中,设置一个文本标签和3个按钮,分别对应消息提示Toast的3种显示方式。代码如下:       1      2    android:layout_width=”fill_parent”     4    android:layout_height=”fill_parent”     5    android:orientation=”vertical” >     6           android:layout_width=”fill_parent”     8         android:layout_height=”wrap_content”     9         android:gravity=”center”     10         android:text=”消息提示Tost”     11         android:textSize=”24sp” />     12        24         30     (2)设计控制文件MainActivity.java的代码如下:       1 package com.ex03_15;     2 import android.app.Activity;     3 import android.os.Bundle;     4 import android.view.Gravity;     5 import android.view.View;     6 import android.view.View.OnClickListener;     7 import android.widget.Button;     8 import android.widget.ImageView;     9 import android.widget.LinearLayout;     10 import android.widget.ListView;     11 import android.widget.Toast;     12     13 public class MainActivity extends Activity      14 {     15     ListView list;     16     Button btn1,btn2,btn3;     17     @Override     18     public void onCreate(Bundle savedInstanceState)      19     {     20         super.onCreate(savedInstanceState);     21         setContentView(R.layout.activity_main);     22         btn1=(Button)findViewById(R.id.btn1);     23         btn2=(Button)findViewById(R.id.btn2);      24         btn3=(Button)findViewById(R.id.btn3);     25         btn1.setOnClickListener(new mClick());     26         btn2.setOnClickListener(new mClick());     27         btn3.setOnClickListener(new mClick());     28     }      29        30    class mClick implements OnClickListener     31    {     32 ?   Toast toast;     33 ?   LinearLayout toastView;     34 ?   ImageView imageCodeProject;     35    @Override     36 ?   public void onClick(View v)     37 ?   {     38       if(v==btn1)     39       {     40     Toast.makeText(getApplicationContext(),     41         “默认Toast方式”,     42             Toast.LENGTH_SHORT).show();     43     }     44        else if(v==btn2)     45     {     46       toast=Toast.makeText(getApplicationContext(),     47                        “自定义Toast的位置”,     48                         Toast.LENGTH_SHORT);     49       toast.setGravity(Gravity.CENTER, 0, 0);     50       toast.show();     51     }     52        else if(v==btn3)      53     {     54       toast=Toast.makeText(getApplicationContext(),     55                  “带图标的Toast”,     56                   Toast.LENGTH_SHORT);     57       toast.setGravity(Gravity.CENTER, 0, 80);     58       toastView=(LinearLayout)toast.getView();     59       imageCodeProject=new ImageView(MainActivity.this);     60       imageCodeProject.setImageResource(R.drawable.icon);     61       toastView.addView(imageCodeProject, 0);     62       toast.show();     63     }     64       }     65 }     66 }    程序的运行结果如图3.21所示。
图3.21  消息提示Tost的3种方式3.8 列 表 组 件3.8.1  列表组件ListView类  ListView类是Android程序开发中经常用到的组件,该组件必须与适配器配合使用,由适配器提供显示样式和显示数据。  ListView类的常用方法见表3-16。表3-16  ListView类的常用方法常 用 方 法说    明ListView(Context context)构造方法setAdapter(ListAdapter adapter)设置提供数组选项的适配器addHeaderView(View v)设置列表项目的头部addFooterView(View v)设置列表项目的底部setOnItemClickListener(AdapterView.OnItemClickListener listener)注册单击选项时执行的方法,该方法继承于父类android. widget.AdapterView    【例3-16】列表组件示例。  在界面设计中,设置一个文本标签和一个列表组件ListView。  程序设计步骤:  (1)在界面布局文件中声明列表组件ListView。  (2)在Activity中获得相关组件实例。  (3)通过触发列表的选项事件,调用mClick类的onClick()方法显示相应提示内容。  程序代码:  (1)设计界面布局文件activity_main.xml。       1      2      6            11           15     (2)设计控制文件MainActivity.java。       1 package com.ex03_16;     2 import android.app.Activity;     3 import android.os.Bundle;     4 import android.view.View;     5 import android.widget.AdapterView;     6 import android.widget.AdapterView.OnItemClickListener;     7 import android.widget.ArrayAdapter;     8 import android.widget.ListView;     9 import android.widget.TextView;     10 import android.widget.Toast;     11 public class MainActivity extends Activity      12 {     13  ListView list;     14  @Override     15  public void onCreate(Bundle savedInstanceState)      16   {     17     super.onCreate(savedInstanceState);     18     setContentView(R.layout.activity_main);     19     list= (ListView)findViewById(R.id.ListView01);       20     //定义数组       21     String[] data ={       22                       “(1)荷塘月色”,       23                       “(2)炫民族风”,       24                       “(3)天蓝蓝”,       25                       “(4)美天下”,       26                       “(5)自由飞翔”,       27                     };       28     //为ListView设置数组适配器ArrayAdapter       29      list.setAdapter(new ArrayAdapter(this,      30          android.R.layout.simple_list_item_1, data));       31      //为ListView设置列表选项监听器       32      list.setOnItemClickListener(new mItemClick());     33  }     34  //定义列表选项监听器的事件      35 class mItemClick implements OnItemClickListener     36 {     37   @Override     38  public void onItemClick(AdapterView> arg0, View arg1, int arg2, long arg3)      39  {     40     Toast.makeText(MainActivity,”您选择的项目是:”      41             ((TextView)arg1).getText(), Toast.LENGTH_SHORT).show();       42  }     43 }     44 }    语句说明:  (1)android.R.layout.simple_list_item_1是一个Android系统内置的ListView布局方式。* android.R.layout.simple_list_item_1:一行text。* android.R.layout.simple_list_item_2:一行title,一行text。* android.R.layout.simple_list_item_single_choice:单选按钮。* android.R.layout.simple_list_item_multiple_choice:多选按钮。  (2)OnItemClickListener是个接口,用于监听列表组件选项的触发事件。  (3)Toast.makeText().show()显示提示消息框。  程序的运行结果如图3.22所示。
图3.22  列表组件示例3.8.2  列表组件ListActivity类  当整个Activity中只有一个ListView组件时,可以使用ListActivity。其实,ListActivity和一个只包含一个ListView组件的普通Activity没有太大区别,只是实现了一些封装而已。ListActivity类继承于Activity类,默认绑定了一个ListView组件,并提供了一些与ListView处理相关的操作。  ListActivity类常用的方法为getListView(),该方法返回绑定的ListView组件。  【例3-17】ListActivity应用示例。  (1)设计界面布局文件activity_main.xml,其代码如下:       1      2 android:layout_width=”fill_parent”     4 android:layout_height=”fill_parent”     5 android:orientation=”vertical” >     6 android:id=”@ id/android:list”     8 android:layout_height=”wrap_content”      9 android:layout_width=”fill_parent” />     10     说明:  ListActivity布局文件中的ListView组件的id应设为”@id/android:list”。  (2)设计控制文件MainActivity.java,其代码如下:       1 package com.ex03_17;     2 import android.app.ListActivity;     3 import android.os.Bundle;     4 import android.view.View;     5 import android.widget.AdapterView;     6 import android.widget.ArrayAdapter;     7 import android.widget.ListView;     8 import android.widget.TextView;     9 import android.widget.Toast;     10 import android.widget.AdapterView.OnItemClickListener;     11 public class MainActivity extends ListActivity      12 {     13 @Override     14 public void onCreate(Bundle savedInstanceState)      15   {     16   super.onCreate(savedInstanceState);     17   setContentView(R.layout.activity_main);     18 //定义数组       19  String[] data={       20     “(1)荷塘月色”,       21     “(2)炫民族风”,       22     “(3)天蓝蓝”,       23     “(4)美天下”,       24     “(5)自由飞翔”,       25      };      26 //获取列表项     27  ListView list=getListView();            28 //设置列表项的头部     29  TextView header=new TextView(this);     30  header.setText(“凤凰传奇经典歌曲”);     31  header.setTextSize(24);     32 list.addHeaderView(header);            33 //设置列表项的底部     34  extView foot=new TextView(this);     35  foot.setText(“请选择”);     36  foot.setTextSize(24);     37  list.addFooterView(foot);      38  setListAdapter(new ArrayAdapter(this,      39  android.R.layout.simple_list_item_1, data));      40  list.setOnItemClickListener(new mItemClick());     41   }     42 //定义列表选项监听器      43  class mItemClick implements OnItemClickListener     44  {     45  @Override     46  public void onItemClick(AdapterView> arg0, View arg1, int arg2, long arg3)      47  {     48 Toast.makeText(getApplicationContext(),       49      “您选择的项目是:” ((TextView)arg1).getText(),      50      Toast.LENGTH_SHORT).show();       51      }     52   }     53 }    程序的运行结果如图3.23所示。
图3.23  ListActivity应用示例3.9 滑动抽屉组件  在日常生活中,当杂乱的物品很多时,可以把这些物品分类整理好放在不同的抽屉中,这样在使用物品时,打开抽屉,里面的东西一目了然。在Android系统中,也可以把多个程序放到一个应用程序的抽屉里。如图3.24(a)所示,单击“向上”按钮(称为手柄)时,打开抽屉;如图3.24(b)所示,单击“向下”按钮时,关闭抽屉。               ?          (a)单击“向上”按钮,将打开抽屉            ??? (b)单击“向下”按钮,将关闭抽屉图3.24  滑动抽屉示例  使用?Android?系统提供的?SlidingDraw?组件可以实现滑动抽屉的功能。先来看一下SlidingDraw类的重要方法和属性,其重要的XML属性如表3-17所示。表3-17  SlidingDraw类重要的XML属性属    性说    明android:allowSingleTap设置通过手柄打开或关闭滑动抽屉android:animateOnClick单击手柄时,是否加入动画,默认为trueandroid:handle指定抽屉的手柄handleandroid:content隐藏在抽屉里的内容android:orientation滑动抽屉内的对齐方式    SlidingDraw类的重要方法如表3-18所示。表3-18  SlidingDraw类的重要方法方    法说    明animateOpen()关闭时实现动画animateOpen()打开时实现动画getContent()获取内容getHandle()获取手柄setOnDrawerOpenListener(SlidingDrawer.OnDrawerOpenListener onDrawerOpenListener)打开抽屉的监听器setOnDrawerCloseListener(SlidingDrawer.OnDrawerCloseListener onDrawerCloseListener)关闭抽屉的监听器setOnDrawerScrollListener(SlidingDrawer.OnDrawerScrollListener onDrawerScrollListener)打开/关闭切换时的监听器    【例3-18】实现图3.24所示的滑动抽屉SlidingDraw组件的应用示例。  事先准备好两个图标文件,分别命名为up.jpg和down.jpg,将它们复制到resdrawable-hdpi目录下,以作滑动抽屉的手柄之用。  (1)设计界面布局文件Activity_main.xml。  在XML文件中设置一个SlidingDraw组件,然后设置一个图标按钮ImageButton作为抽屉手柄。activity_main.xml的代码如下:       1     xmlns:tools=”http://schemas.android.com/tools”     3     android:id=”@ id/LinearLayout1″     4     android:layout_width=”match_parent”     5     android:layout_height=”match_parent”     6     android:orientation=”vertical” >     7         8            android:layout_width=”fill_parent”     10        android:layout_height=”fill_parent”     11       android:handle=”@ id/handle”     12        android:content=”@ id/content”      13        android:orientation=”vertical”     14        android:id=”@ id/slidingdrawer”  >     15         16         21          22              android:id=”@id/content”     24          android:layout_width=”fill_parent”     25          android:layout_height=”fill_parent”     26          android:background=”#66cccc”     27          android:focusable=”true” >     28          29      30     (2)设计控制文件MainActivity.java。在控制程序MainActivity.java中,主要是实现滑动抽屉的几个监听事件。其代码如下:       1 package com.example.ex03_18;     2 import android.os.Bundle;     3 import android.app.Activity;     4 import android.widget.ArrayAdapter;     5 import android.widget.ImageButton;     6 import android.widget.LinearLayout;     7 import android.widget.ListView;     8 import android.widget.SlidingDrawer;     9 import android.widget.Toast;     10     11 public class MainActivity extends Activity      12 {     13    SlidingDrawer mDrawer;     14    ImageButton imgBtn;     15    ListView listView;     16    LinearLayout layout;     17    String data[]=new String[]{“使命召唤”,”植物大战僵尸”,”愤怒的小鸟”};     18     @Override     19     public void onCreate(Bundle savedInstanceState)     20     {     21        super.onCreate(savedInstanceState);     22        setContentView(R.layout.activity_main);     23        layout=(LinearLayout) findViewById(R.id.content);     24        listView = new ListView(MainActivity.this);     25        listView.setAdapter(new ArrayAdapter(     26             MainActivity.this,      27             android.R.layout.simple_expandable_list_item_1,      28             data));     29        layout.addView(listView);     30        imgBtn=(ImageButton)findViewById(R.id.handle);     31        mDrawer=(SlidingDrawer)findViewById(R.id.slidingdrawer);     32        mDrawer.setOnDrawerOpenListener(new mOpenListener());     33        mDrawer.setOnDrawerCloseListener(new mCloseListener());     34        mDrawer.setOnDrawerScrollListener(new mScrollListener());     35     }     36     37     class mOpenListener implements SlidingDrawer.OnDrawerOpenListener     38     {     39     @Override     40     public void onDrawerOpened()      41     {     42     imgBtn.setImageResource(R.drawable.down);     43     }     44     }     45         46     class mCloseListener implements SlidingDrawer.OnDrawerCloseListener     47     {     48     @Override     49     public void onDrawerClosed()      50     {     51      imgBtn.setImageResource(R.drawable.up);     52     }     53     }     54         55     class mScrollListener implements SlidingDrawer.OnDrawerScrollListener     56     {     57      @Override     58         public void onScrollEnded()      59         {     60         Toast.makeText(MainActivity.this, “结束拖动”,      61                                      Toast.LENGTH_SHORT).show();       62         }     63         @Override     64         public void onScrollStarted()      65         {     66         Toast.makeText(MainActivity.this, “窗口拖动开始”,      67                                       Toast.LENGTH_SHORT).show();     68         }     69     }     70 }  习  题  3  1.编写程序,实现如图3.25所示的功能,即单击按钮,在文本编辑框中输入的文字内容显示到文本标签中。
图3.25 文本编辑框中的文字内容显示到文本标签中  2.设计一个加法计算器,如图3.26所示,在前两个文本编辑框中输入整数,单击“=”按钮时,在第3个文本编辑框中显示这两个数之和。
图3.26 加法计算器   3.设计如图3.27所示的用户界面布局。
图3.27 设计用户界面  4.参照例3-14,将画廊的小图片显示到屏幕的下方,在图片切换器中显示的放大图片显示在屏幕的上方。
书摘插画
插图

插图

插图

插图

插图

插图

抢先评论了 “Android应用程序设计(修订版)” 取消回复

评论

还没有评论。

相关产品

加入购物车

Android开发从入门到精通(第2版)

EUR €45.99
加入购物车

微信小程序开发入门与实践

EUR €43.99
加入购物车

术与道 移动应用UI设计必修课 第2版

EUR €41.99
阅读更多
缺货

Android组件化架构

EUR €48.99

东东购的宗旨是服务喜爱阅读中文书籍的海外人民,提供一个完善的购书平台,让国人不论何时何地都能沉浸在书香之中,读着熟悉的中文字,回忆着家乡的味道。


安全加密结账 安心网络购物 支持Paypal付款

常见问题

  • 货物配送
  • 退换货政策
  • 隐私政策
  • 联盟营销

客户服务

  • 联系东东
  • 关于东东
  • 帮我找书
  • 货物追踪
  • 会员登入

订阅最新的优惠讯息和书籍资讯

选择币别

EUR
USD
CAD
AUD
NZD
NOK
GBP
CHF
SEK
CNY
UAH
ILS
SAR
MXN
KRW
MYR
SGD
HUF
TRY
JPY
HKD
TWD
facebookinstagram
©2020 东东购 EasternEast.com

限时特卖:用“SALE15”优惠券全场书籍85折!可与三本88折,六本78折的优惠叠加计算。 忽略