本书从初学者的角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍使用Android Studio 2.X开发环境开发Android应用程序应该掌握的各方面技术。全书共分16章,内容包括使用Android Studio开发Android App、Android程序设计基础讲座、Android App界面设计、事件处理、用户界面的基本组件、高级UI组件、即时消息与对话框、用Intent启动程序中其他Activity、用Intent启动手机内的各种程序、拍照与显示照片、播放音乐与视频、用传感器制作水平仪与体感控制、WebView与SharedPreferences、GPS定位、地图与菜单、SQLite数据库、Android互动设计。所有知识都结合具体实例进行介绍,可以使读者轻松领会Android应用程序开发的精髓,快速提高开发技能。
目前,以 Android 系统为基础的智能手机、平板电脑以及炫酷的智能穿戴设备在市场上大行其道。从业人员如何快速学习和掌握 Android App(应用)的开发呢?能否推荐一本最新的 Android App开发的教材,可以让使用这本教材的人在学习过程中直接实践最新版本的 Android Studio开发环境呢?
对于上述需求,建议阅读这本新书。
这是一本引领 Android App 开发的入门教材,当然也适合转向 Android App开发的专业人员用于熟悉 Android Studio开发环境。本书撰写的宗旨是:读者不必是 Java 大师,也不必是面向对象程序设计的高手,只要通过本书简单易懂的讲解和图示、标准范例程序的调试和演练、循环往复的动手练习和实践,就能达到快速入门的目的,奠定 Android App 开发的坚实基础。
本书既适合作为大专院校和社会培训学校的教材,又适合有基础编程经验的读者自学。本书中涵盖了 Android App 开发中的必备主题,如用户界面和版面布局、 Activity(活动)、事件处理、 Intent、内容提供者、照相、影音播放、 GPS定位和地图、传感器、网页浏览(WebView)、对话框、菜单、SQLite 数据库、Java 面向对象程序设计与 XML等。
本书每一章都提供了范例程序,功能不同的范例程序有 40 多个,若加上同类范例而功能有差异的不同版本,则范例程序的总数高达 70 多个。这些范例适用于 Android 2.2到 Android 7.x,它们都在 Android Studio 2.2.2 的集成开发环境下调试通过,除了可以在 AVD(安卓虚拟设备)仿真运行外,还可以直接运行在 Android智能手机和平板电脑上。
最后祝大家学习顺利,早日编写出热门 Android App!
封面图
目录
- 推荐序
- 前言
- 关于范例程序
- 第1章 使用 Android Studio开发 Android App
- 1-1 创建第一个 Android App 项目 2
- 1-2 在计算机的仿真器上执行 App 11
- 创建 Android 仿真器 11
- 在仿真器上执行 Android App 14
- 仿真器的操作技巧 18
- 调整仿真器的语言、时区及删除 App 20
- 在 Android Studio 中查看仿真器与 App 的执行情况 22
- 1-3 Android Studio 快速上手 23
- 认识 Android Studio 的操作环境 24
- 打开最近使用过的项目 27
- 项目的移动、复制与删除 28
- 打开“移动或复制后”或“外来”的项目 29
- 1-4 Android 项目的构成 30
- Android 资源文件的“多版本”特色 32
- 第2章 Android 程序设计基础讲座
- 2-1 Android App 的主角:Activity 40
- Activity 40
- Android App 的组成 40
- 2-2 Android 程序的设计流程 41
- 视觉设计和程序逻辑 41
- 用图形化界面做视觉设计 43
- 用Java编写程序逻辑 44
- 把视觉设计与程序代码构建起来 44
- 2-3 认识 Activity 的基本程序逻辑 45
- 初识 MainActivity 框架 45
- onCreate():MainActivity 第一件要做的事 46
- setContentView():载入布局文件 48
- 资源ID 48
- 2-4 组件的布局与属性设置 50
- id 属性 52
- ndViewById() 方法 53
- textView的常见属性 54
- 在属性中设置引用 54
- 在属性中设置方法的名称 56
- 2-5 开始动手编写程序 56
- 范例2-1:单击按钮就放大显示文字 57
- 2-6 输入字段 EditText 组件 76
- getText():获取用户输入的文字 76
- setText():设置 TextView 显示的文字 77
- 范例2-2:加入 EditText 组件 77
- 2-7 使用 USB 线将程序部署到手机上执行 82
- 打开手机调试功能 82
- 通过 USB 将 Android App 传送到手机安装并执行 83
- 执行已安装的程序 85
- 2-8 修改项目的程序包名称和应用程序 ID 85
- 第3章 Android App界面设计
- 3-1 View 与 ViewGroup(Layout):组件与布局 94
- View:视觉组件 94
- View 组件的属性与设置 95
- 再谈 id 属性 96
- Layout:界面布局 98
- 3-2 使用 LinearLayout 建立界面布局 100
- LinearLayout:按序排列组件 100
- 范例3-1:在布局中使用 LinearLayout 101
- 范例3-2:使用 LinearLayout (Horizontal) 创建窗体 103
- imputType 属性:设置输入字段种类 110
- 范例3-3:加入输入电话专用的 EditText 110
- 3-3 使用 weight 属性控制组件的宽 / 高 114
- 范例3-4:利用 weight 属性对齐组件 115
- 3-4 通过属性美化外观 117
- 组件的边界:margins 与 paddings 117
- 范例3-5:设置边界让输入窗体版面变宽松 119
- 颜色:以RGB值设置文字或背景颜色 120
- 范例3-6:设置文字及背景颜色 120
- 3-5 用程序设置组件的外观属性 125
- setTextColor():改变文字颜色 125
- 范例3-7:变色龙——以随机数设置颜色属性 126
- 3-6 使用 ConstraintLayout 提升设计与执行的性能 130
- ConstraintLayout 的运行原理 130
- 范例3-8:学习 ConstraintLayout 的使用 131
- 约束的种类 137
- 让组件可以动态重设大小与位置 138
- 使用引导线 140
- 自动连接与推断约束 141
- 3-7 使用 Gmail 将程序寄给朋友测试 144
- 设置可以安装非 Google Play 商店下载的程序 144
- 将程序寄给朋友安装 144
- 第4章 与用户互动——事件处理
- 4-1 事件处理的机制 150
- 来源对象与监听对象 150
- Java 的接口 150
- 4-2 “单击”事件的处理 153
- 范例4-1:每单击一次按钮,就让计数器加 1 153
- 4-3 监听“长按”事件 158
- onLongClick():处理“长按”事件 158
- 范例4-2:长按按钮将计数值归零 158
- 4-4 处理不同来源对象的相同事件 160
- getId():判断事件的来源对象 160
- 范例4-3:长按按钮计数加 2,长按计数值归零 161
- 4-5 监听“触控”事件让手机震动 165
- onTouch():触控事件的处理 165
- 如何让手机震动 166
- 范例4-4:监听 TextView 的触控事件 166
- 在程序中登记“震动”的权限 167
- 第5章 用户界面的基本组件
- 5-1 多选一的单选按钮 175
- RadioButton 与 RadioGroup 组件 175
- getCheckedRadioButtonId():读取单选按钮状态 175
- 范例5-1:读取 RadioGroup 选取的选项 176
- onCheckedChanged():选项改变的事件 182
- 范例5-2:利用 RadioButton 选择温度转换单位 183
- 5-2 可复选的复选框 192
- isChecked():检查是否被选取 192
- 范例5-3:以复选框创建餐点选单 192
- onCheckedChanged():选取 / 取消复选框的事件 196
- 范例5-4:利用选取事件实时修改订单 197
- 5-3 显示图像的 ImageView 203
- 使用 Android 系统内建的图像资源 203
- 范例5-5:显示系统内建图像 203
- 使用自行提供的图像资源 205
- 范例5-6:为选单加上图片 206
- 图像的缩放控制 213
- 第6章 高级UI组件:Spinner与 ListView
- 6-1 Spinner 选单组件 219
- Spinner 组件的属性设置 219
- 用getSelectedItemPosition()读取Spinner组件的选项 220
- 范例6-1:使用 Spinner 设计购票程序 221
- onItemSelected():Spinner 组件的选择事件 225
- 范例6-2:运动能量消耗计算器 225
- 6-2 ListView 列表框 231
- onItemClick(): ListView 的单击事件 232
- 范例6-3:使用 ListView 创建选单 232
- 6-3 在程序中变更 Spinner 的显示选项 236
- ArrayAdapter:Spinner 与数据的桥梁 236
- ArrayAdapter():创建 ArrayAdapter 对象 236
- setDropDownViewResource():设置选单选项的显示样式 237
- setAdapter():将 ArrayAdapter 与 Spinner 绑在一起 238
- 范例6-4:使用 Spinner 制作饮料订单 238
- 第7章 即时消息与对话框
- 7-1 使用 Toast 显示即时消息 246
- Toast 类 247
- 范例7-1:脑筋急转弯—用 Toast 显示答案 247
- Toast 信息的取消显示与更新显示 250
- 范例7-2:实时显示答案的脑筋急转弯 251
- 7-2 使用 Snackbar 显示即时信息 253
- 范例7-3:脑筋急转弯 —— 用 Snackbar 显示答案 254
- 7-3 使用 Alert 对话框 256
- AlertDialog 类 256
- AlertDialog.Builder:设置与创建 Alert 对话框 257
- setCancelable():设置按返回键关闭对话框 257
- show():创建并显示对话框 257
- 创建 Alert 对话框的简洁写法 258
- 范例7-4:显示欢迎信息的对话框 258
- 在对话框中加入按钮 260
- 范例7-5:Android问卷调查 261
- 7-4 使用日期、时间对话框 264
- DatePickerDialog 与 TimePickerDialog 类 265
- onDateSet() 与 onTimeSet():获取选取的日期与时间 266
- 范例7-6:日期时间选择器 267
- 第8章用 Intent 启动程序中 的其他 Activity
- 8-1 在程序中新增 Activity 274
- 8-2 用 Intent 启动程序中的 Activity 276
- startActivity():用显式 Intent 启动 Activity 276
- finish():结束 Activity 277
- 8-3 在 Intent 中夹带数据传给新的Activity 280
- putExtra():附加数据到 Intent 中 280
- getIntent() 与 getXxxExtra():从 Intent 中取出数据 281
- 8-4 要求新的 Activity 返回数据 287
- 第9章用 Intent 启动手机内的各种程序
- 9-1 使用 Intent 启动程序的方式 295
- setAction()和setData():加入动作和数据到 Intent 中 296
- Uri:Intent 的数据 296
- 范例 9-1:快速拨号程序 297
- 9-2 使用 Intent 启动电子邮件、短信、浏览器、地图与 Web 搜索 299
- 电子邮件地址 299
- 短信 301
- 网址 301
- 经纬度坐标值 301
- 搜索 Web 数据 301
- 范例9-2:使用 Intent 启动电子邮件、短信、浏览器、地图与 Web 搜索 302
- 从启动的程序返回数据 306
- 第10章拍照与显示照片
- 10-1 使用 Intent 启动系统的相机程序 309
- 利用 Bundle 取出 Intent 中附带的 Bitmap 对象 309
- 范例10-1:利用系统的相机程序拍照 310
- 10-2 要求相机程序存盘 314
- 准备代表图像文件路径的 Uri 314
- 读写文件的危险权限 315
- 用 BitmapFactory 类读取图像文件 317
- 范例 10-2:要求相机程序存盘并在程序中显示出来 318
- 10-3 解决照片过大的问题 321
- 用 BitmapFactory.Options 设置加载图像文件的选项 321
- 范例10-3:按显示尺寸加载缩小的图像文件 322
- 10-4 旋转手机与旋转照片 324
- 关闭自动旋转功能并设置屏幕为直向显示 325
- 用 Matrix 对象旋转图片 326
- 范例 10-4:按照片是直拍还是横拍自动旋转照片 326
- 10-5 使用 Intent 浏览并选取照片 330
- 将照片改为可供系统共享的文件 331
- 范例10-5:利用 Intent 浏览并选取已拍好的照片 332
- 第11章播放音乐与视频
- 11-1 使用Intent选取音乐或视频 339
- 读取预存在程序中的多媒体文件 341
- 范例11-1:让用户挑选影音文件 341
- 11-2 用 MediaPlayer 播放音乐 347
- MediaPlayer 的音乐播放流程 347
- MediaPlayer 可引发的 3 个重要事件 348
- 处理在播放音乐时切换到其他程序的情况 349
- 让屏幕不进入休眠状态 350
- 范例11-2:用 MediaPlayer 播放音乐 351
- 11-3 用 VideoView 播放视频 358
- 使用 VideoView 搭配 MediaController 播放视频 359
- 用程序控制 VideoView 的视频播放 359
- 设置全屏幕显示 360
- 处理在播放视频时切换到首页或其他程序的情况 361
- 处理在播放时旋转手机的情况 362
- 范例11-3:打开新的 Activity 播放视频 363
- 11-4 在 Android 7 的多窗口模式下播放影音 368
- 范例11-4:让播放器支持多窗口模式 369
- 第12章 用传感器制作水平仪与体感控制
- 12-1 读取加速传感器的值 374
- 认识加速传感器 374
- 获取系统的传感器对象 375
- 读取传感器的值 375
- 范例12-1:显示加速传感器的加速度值 377
- 12-2 利用 x、y 轴的加速度值制作水平仪 380
- 利用左边界与上边界移动图片 380
- 范例12-2:利用加速传感器制作水平仪 382
- 12-3 利用加速传感器做体感控制 385
- 检测手机面朝下平放的状态 385
- 检测手机摇动 386
- 范例12-3:利用加速传感器控制音乐播放 386
- 第13章 WebView 与 SharedPreferences
- 13-1 使用 WebView 显示网页 393
- 范例13-1:显示京东网站 393
- 13-2 改进 WebView 功能 397
- 使用 WebSettings 启用网页缩放和 JavaScript 398
- 使用 WebViewClient 打开超链接 399
- 使用 WebChromeClient 创建网页加载进度界面 399
- 使用ProgressBar 显示进度条 401
- 使用 onBackPressed() 实现回上一页功能 402
- 范例13-2:改善 WebView 行为 402
- 13-3 使用 SharedPreferences 记录信息 406
- 使用 SharedPreferences 对象存储数据 407
- 读取首选项数据 408
- 存储/恢复数据的时机:onPause()/onResume() 408
- 范例13-3: ickr 照片快搜 409
- 第14章 GPS定位、地图、菜单
- 14-1 获取手机定位数据 419
- LocationManager:系统的定位管理器 419
- 定位提供者 419
- 用 getBestProvider() 方法获取定位提供者名称 420
- 请求用户授权 420
- 用 requestLocationUpdates() 注册位置更新事件的监听器 421
- 用 isProviderEnabled() 方法检查定位提供者是否可以使用 421
- 实现 LocationListener 接口 421
- 用 removeUpdate() 方法取消注册监听器 423
- 范例14-1:获取所在位置(经纬度) 423
- 14-2 定位信息与地址查询 432
- 用 Geocoder 类做地址查询 432
- Address 地址对象 433
- 范例14-2:地址专家——用经纬度查询地址 433
- 14-3 在程序中显示 Google Map 438
- 使用 Google Map 的前置准备 438
- 如何使用 Google Map 439
- 范例14-3:在 Google Map 中显示当前所在位置 444
- 14-4 为Activity添加菜单 456
- Activity默认的菜单 456
- 设置菜单的内容 457
- 编写菜单所需的两个方法 460
- 范例14-4:为程序加上菜单 460
- 第15章 SQLite 数据库
- 15-1 认识 SQLite 数据库 471
- 数据库、数据表、数据字段 471
- 使用 CREATE TABLE 语句创建数据表 471
- 使用 openOrCreateDatabase() 创建数据库 472
- 用 execSQL() 方法执行 CREATE TABLE 语句 473
- 用 insert() 方法和 ContentValues 对象新增数据记录 473
- 范例15-1:创建数据库和数据表 474
- 15-2 查询数据及使用 Cursor 对象 476
- 使用 SELECT 语句进行数据查询 476
- 使用 Cursor 对象获取查询结果 477
- 使用 Cursor 对象的 getXXX() 方法读取数据 478
- 范例15-2:使用 Cursor 对象读取查询结果 478
- 15-3 热线通讯家 481
- 使用 SimpleCursorAdapter 自定义 ListView 版面 482
- 数据表的“_id”字段 483
- 范例15-3:热线通讯家 484
- 第16章 Android互动设计——蓝牙遥控自走车 iTank
- 16-1 让 Android与外部设备互动 497
- iTank智能型移动平台基本款简介 497
- FlagAPI 简介 498
- 16-2 点亮 iTank 控制板上的 LED 灯 499
- 点亮 LED 的指令 500
- 范例16-1:点亮 LED1 500
- 16-3 手机蓝牙遥控 iTank 508
- FlagTank 类 508
- 范例16-2:手机蓝牙遥控车 508
- 附录A OO与Java:一招半式写 App
- A-1 对象与类 516
- 属性与行为 516
- 类 516
- 对象 517
- 存储对象的变量只是一个转向器 518
- 指向自己的 this 变量 519
- 重载的方法 521
- 对象的构造函数 522
- static:类变量与方法 524
- A-2 继承与接口 527
- extends:继承 527
- Override:重写父类中的方法 529
- 接口 530
- A-3 类库与程序包 535
- 程序包 535
- 用 import 导入程序包名称 536
- 用 package 将类包装在程序包中 538
- 附录B 常用的Android Studio选项设置
- B-1 快速找出想要设置的选项 541
- B-2 设置文件编码方式 542
- B-3 显示行号 543
- B-4 调整字号 543
- B-5 设置自动化的 Import 功能 545
- B-6 调整各类警告与错误的检查功能 545
- B-7 设置使用自行安装的Java JDK版本 546
- 附录C 使用旧项目或外来项目时的问题排除
- 更新项目所使用的 SDK 版本 552
- 附录D 关于 Android 的 XML 556
- D-1认识 XML 557
- D-2Android 的 XML 文件 558
- 附录E 导入 ADT 项目 561
- 导入 ADT项目后中文变成乱码 564