第1章 使用Android Studio开发Android App 2
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程序设计基础讲座 40
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界面设计 94
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章 与用户互动——事件处理 150
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章 用户界面的基本组件 175
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 219
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章 即时消息与对话框 246
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 274
8-1在程序中新增Activity 274
8-2用Intent启动程序中的Activity 276
startActivity():用显式Intent启动Activity 276
nish():结束Activity 277
8-3在Intent中夹带数据传给新的Activity 280
putExtra():附加数据到Intent中 280
getIntent()与getXxxExtra():从Intent中取出数据 281
8-4 要求新的Activity返回数据 287
第9章用Intent启动手机内的各种程序 295
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章拍照与显示照片 309
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章 播放音乐与视频 339
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-1:让播放器支持多窗口模式 369
第12章 用传感器制作水平仪与体感控制 374
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 393
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:flickr照片快搜 409
第14章 GPS定位、地图、菜单 419
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数据库 471
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 497
16-1让Android与外部设备互动 497
iTank智能型移动平台基本款简介 497
F1agAPI简介 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 516
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选项设置 541
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使用旧项目或外来项目时的问题排除 552
更新项目所使用的SDK版本 552
附录D关于Android的XML 557
D-1认识XML 557
D-2 Android的XML文件 558
附录E导入ADT项目 564
导入ADT项目后中文变成乱码 564