第1章 使用Android Studio开发Android App 2
1-1 创建第一个Android App项目 2
1-2 在计算机的仿真器上执行App 13
创建Android仿真器 13
在仿真器上执行Android App 17
调整仿真器的语言、时区及删除App 22
在Android Studio中查看仿真器与App的执行情况 24
1-3 Android Studio快速上手 26
认识Android Studio的操作环境 27
打开最近使用过的项目 30
项目的移动、复制与删除 31
打开“移动或复制后”或“外来”的项目 32
1-4 Android项目的构成 34
Android资源文件的“多版本”特色 36
习题 42
第2章 Android程序设计基础讲座 45
2-1 Android App的主角:Activity 45
Activity(活动) 45
Activity App的组成 46
2-2 Android程序的设计流程 47
视觉设计和程序逻辑 47
用图形化界面来做视觉设计 49
用Java来编写程序逻辑 50
把视觉设计与程序代码构建(Build)起来 51
2-3 认识Activity的基本程序逻辑 51
初识MainActivity框架 51
onCreate():MainActivity第一件要做的事 53
setContentView():载入布局文件 56
资源的ID 56
2-4 组件的布局与属性设置 58
id属性 60
findViewById()方法 60
常见的属性类型 61
在属性中直接设置值 62
在属性中设置引用(Reference) 62
在属性中设置方法的名称 63
2-5 开始动手编写程序 64
范例2-1 单击按钮就放大显示的文字 64
2-6 输入字段EditText组件 87
getText():获取用户输入的文字 87
setText():设置TextView显示的文字 88
范例2-2 加入EditText组件 88
2-7 使用USB线将程序部署到手机上执行 92
打开手机调试功能 93
通过USB将Android App传送到手机安装并执行 94
执行已安装的程序 95
2-8 修改项目的程序包名称和应用程序ID 96
习题 102
第3章 Android App界面设计 104
3-1 View与ViewGroup(Layout):组件与布局 104
View:视觉组件 104
View组件的属性与设置 106
再谈id属性 107
Layout:画面布局 109
3-2 使用LinearL-ayout建立画面布局 110
LinearLayout:按序排列组件 111
范例3-1 在布局中使用LinearLayout 112
范例3-2 使用LinearLayout(Horizontal)创建窗体 115
imputType属性:设置输入字段种类 119
范例3-3 加入输入电话专用的EditText 119
3-3 使用weight属性控制组件的宽/高 125
范例3-4 利用weight属性对齐组件 126
3-4 通过属性美化外观 129
组件的边界:margins与paddings 129
范例3-5 设置边界让输入窗体版面变宽松 131
颜色:以RGB值设置文字或背景颜色 133
范例3-6 设置文字及背景颜色 134
3-5 以程序设置组件的外观属性 138
setTextColor():改变文字颜色 138
范例3-7 变色龙——以随机数设置颜色属性 139
3-6 使用Gmail将程序寄给朋友测试 143
设置可以安装非Google Play商店下载的程序 143
将程序寄给朋友安装 144
习题 148
第4章 与用户互动——事件处理 150
4-1 事件处理的机制 150
来源对象与监听对象 150
Java的接口(Interface) 150
4-2 “单击”事件的处理 153
范例4-1 每单击一次按钮,就让计数器加1 154
4-3 监听“长按”事件 158
onLongClick():处理“长按”事件 159
范例4-2 长按按钮将计数值归零 159
4-4 处理不同来源对象的相同事件 161
getId():判断事件的来源对象 161
范例4-3 长按按钮计数加2,长按计数值可归零 162
4-5 监听“触控”事件让手机震动 163
onTouch():触控事件的处理 164
如何让手机震动 164
范例4-4 监听TextView的触控事件 165
在程序中登记“震动”的权限 166
习题 172
第5章 用户界面的基本组件 174
5-1 多选一的单选按钮(RadioButton) 174
RadioButton与RadioGroup组件 174
getCheckedRadioButtonId():读取单选按钮状态 174
范例5-1 读取RadioGroup选取的选项 175
onCheckedChanged():选项改变的事件 180
范例5-2 利用RadioButton选择温度转换单位 180
5-2 可复选的复选框(CheckBox) 188
isChecked():检查是否被选取 189
范例5-3 以复选框创建餐点选单 189
onCheckedChanged():选取/取消复选框的事件 192
范例5-4 利用选取事件实时修改订单 193
5-3 显示图像的ImageView 200
使用Android系统内建的图像资源 200
范例5-5 显示系统内建图像 201
使用非Android内建(自行提供)的图像资源 204
范例5-6 替选单加上图片 204
图像的缩放控制 211
习题 214
第6章 高级UI组件:Spinner与ListView 217
6-1 Spinner选单组件 217
Spinner组件的属性设置 217
getSelectedItemPosition()读取Spinner组件的选取项 218
范例6-1 使用Spinner设计购票程序 219
onItemSelected():Spinner组件的选择事件 224
范例6-2 运动能量消耗计算器 224
6-2 ListView列表框 230
onItemClick():ListView的单击事件 231
范例6-3 使用ListView创建选单 232
6-3 在程序中变更Spinner的显示选项 236
ArrayAdapter:Spinner与数据的桥梁 237
ArrayAdapter():创建ArrayAdapter对象 237
setDropDownViewResource():设置选单选项的显示样式 238
setAdapter():将ArrayAdapter与Spinner绑在一起 239
范例6-4 使用Spinner制作饮料订单 239
习题 244
第7章 即时消息与对话框 247
7-1 使用Toast显示即时消息 247
Toast类 248
范例7-1 脑筋急转弯——用Toast显示答案 249
Toast信息的取消显示与更新显示 252
范例7-2 实时显示答案的脑筋急转弯 252
7-2 使用Alert对话框 255
AlertDialog类 256
AlertDialog.Builder:设置与创建Alert对话框 257
setCancelable():设置按返回键关闭对话框 257
show():创建并显示对话框 257
创建Alert对话框的简洁写法 258
范例7-3 显示欢迎信息的对话框 259
在对话框中加入按钮 261
范例7-4 Android问卷调查 262
7-3 使用日期、时间对话框 266
DatePickerDialog与TimePickerDialog类 266
onDateSet()与onTimeSet():获取选取的日期与时间 268
范例7-5 日期时间选择器 268
习题 274
第8章 用Intent启动程序中的其他Activity 276
8-1 在程序中新增Activity 276
范例8-1 在项目中新增Activity 276
8-2 用Intent启动程序中的Activity 279
startActivity():用明确Intent启动Activity 279
finish():结束Activity 280
范例8-2 用Intent来启动Activity 280
8-3 在Intent中夹带数据传给新Activity 284
putExtra():附加数据到Intent中 284
getIntent()与getXxxExtra():从Intent中取出数据 285
范例8-3 在启动新Activity时传送数据 285
8-4 要求新的Activity返回数据 293
范例8-4 在新Activity结束时将数据返回 294
习题 299
第9章 用Intent启动手机内的各种程序 301
9-1 使用Intent启动程序的方式 301
setAction()及setData():加入动作和数据到Intent中 302
Uri:Intent的数据 302
范例9-1 快速拨号程序 303
9-2 使用Intent启动电子邮件、短信、浏览器、地图与Web搜索 305
电子邮件地址 306
短信 307
网址 307
经纬度坐标值 307
搜索Web数据 307
范例9-2 使用Intent启动电子邮件、短信、浏览器、地图与Web搜索 308
从启动的程序返回数据 314
习题 316
第10章 拍照与显示照片 318
10-1 使用Intent启动系统的相机程序 318
利用Bundle取出Intent中附带的Bitmap对象 319
范例10-1 利用系统的相机程序来拍照 319
10-2 要求相机程序存盘 323
准备代表图像文件路径的Uri 323
用BitmapFactory类读取图像文件 324
范例10-2 要求相机程序存盘并在程序中显示出来 325
10-3 解决照片过大问题 327
用BitmapFactory.Options设置加载图像文件的选项 327
范例10-3 按显示尺寸来加载缩小的图像文件 328
10-4 旋转手机与旋转照片 330
关闭自动旋转功能并设置屏幕为直向显示 331
用Matrix对象来旋转图片 332
范例10-4 按照片是直拍还是横拍而自动旋转照片 333
10-5 使用Intent浏览并选取照片 336
将照片改为可供系统共享的文件 338
范例10-5 利用Intent浏览并选取已拍好的照片 339
习题 345
第11章 播放音乐与视频 348
11-1 使用Intent来选取音乐或视频 348
读取预存在程序中的多媒体文件 350
范例11-1 让用户挑选影音文件 351
11-2 用MediaPlayer播放音乐 356
MediaPlayer的音乐播放流程 356
MediaPlayer可引发的3个重要事件 357
处理在播放音乐时切换到其他程序的情况 358
让屏幕不进入休眠状态 360
范例11-2 用MediaPlayer播放音乐 360
11-3 用VideoView播放视频 370
使用VideoView搭配MediaController来播放视频 370
用程序控制VideoView的视频播放 370
设置全屏幕显示 371
处理在播放视频时切换到首页或其他程序的情况 372
处理在播放时旋转手机的情况 374
范例11-3 打开新的Activity来播放视频 375
习题 382
第12章 用传感器制作水平仪与体感控制 385
12-1 读取加速传感器的值 385
认识加速传感器 385
获取系统的传感器对象 386
读取传感器的值 387
范例12-1 显示加速传感器的加速度值 388
12-2 利用x、y轴的加速度值来制作水平仪 391
利用左边界与上边界来移动图片 391
范例12-2 利用加速传感器制作水平仪 393
12-3 利用加速传感器来做体感控制 396
检测手机面朝下平放的状态 396
检测手机摇动 397
范例12-3 利用加速传感器来控制音乐播放 398
习题 402
第13章 WebView与SharedPreferences 404
13-1 使用WebView显示网页 404
范例13-1 显示京东网站 404
13-2 改进WebView功能 408
使用WebSettings启用网页缩放和JavaScript 409
使用WebViewClient处理开启超链接操作 410
使用WebChromeClient创建网页加载进度接口 410
使用ProgressBar显示进度条 412
使用onBackPressed()实现回上一页功能 413
范例13-2 改善WebView行为 413
13-3 使用SharedPreferences记录信息 418
使用SharedPreferences对象存储数据 418
读取首选项数据 419
存储/恢复数据的时机:onPause()/onResume() 420
范例13-3 flickr照片快搜 421
习题 428
第14章 GPS定位、地图、菜单 431
14-1 获取手机定位数据 431
LocationManager:系统的定位管理器 431
定位提供者 431
用getBestProvider()方法获取定位提供者名称 432
用requestLocationUpdates()注册位置更新事件的监听器 432
实现LocationListener接口 433
用removeUpdate()方法取消注册监听器 434
范例14-1 获取所在位置(经纬度) 435
14-2 定位信息与地址查询 441
用Geocoder类做地址查询 441
Address地址对象 442
范例14-2 地址专家——用经纬度查询地址 442
14-3 在程序中显示Google Map 447
使用Google Map的前置准备 447
如何使用Google Map 449
范例14-3 在Google Map中显示当前所在位置 455
14-4 帮Activity加上菜单 466
Activity默认的菜单 467
设置菜单的内容 468
编写菜单所需的2个方法 469
范例14-4 为程序加上菜单 470
习题 479
第15章 SQLite数据库 481
15-1 认识SQLite数据库 481
数据库、数据表、数据字段 481
使用CREATE TABLE语句创建数据表 482
使用openOrCreateDatabase()创建数据库 483
用execSQL()方法执行“CREATE TABLE”语句 483
用insert()方法和ContentValues对象新增数据 484
范例15-1 创建数据库及数据表 484
15-2 查询数据及使用Cursor对象 487
使用SELECT语句进行数据查询 487
使用Cursor对象获取查询结果 488
使用Cursor对象的getXXX()方法读取数据 489
范例15-2 使用Cursor对象读取查询结果 490
15-3 热线通讯家 492
使用SimpleCursorAdapter自定义ListView版面 493
数据表的′_id′字段 494
范例15-3 热线通讯家 495
习题 506
第16章 Android互动设计——蓝牙遥控自走车iTank 508
16-1 让Android与外部的设备互动 508
iTank智能型移动平台基本款简介 508
FlagAPI简介 509
点亮LED的指令 510
16-2 点亮iTank控制板上的LED灯 510
范例16-1 点亮LED1 511
16-3 手机蓝牙遥控iTank 518
FlagTank类 518
范例16-2 手机蓝牙遥控车 519
习题 523
附录A OO与Java:一招半式写App 526
A-1 对象与类 526
属性与行为 526
类 526
对象 527
存储对象的变量只是一个转向器 528
指向自己的this变量 529
重载的方法(Overloading) 532
对象的构造函数(Constructor) 533
static:类变量与方法 535
A-2 继承与接口 538
extends:继承 538
Override:重写父类中的方法 539
界面(Interface) 541
A-3 类库与程序包 546
程序包(Package) 546
用import导入程序包名称 548
用package将类包装在程序包中 550
附录B 常用的Android Studio选项设置 553
B-1 快速找出想要设置的选项 553
B-2 设置文件编码方式 554
B-3 显示行号 555
B-4 调整字号 555
B-5 设置自动化的Import功能 557
B-6 调整各类警告与错误的检查功能 557