第1章 Android开发概述 1
1.1 智能手机编程的挑战 1
1.2 Android由哪些部分构成 2
1.3 你能够控制什么 3
第2章 项目和目标 4
2.1 基本概念 4
2.2 创建项目 5
2.3 项目结构 5
2.3.1 根目录 5
2.3.2 主Activity 6
2.3.3 资源 6
2.3.4 编译结果 7
2.4 AndroidManifest.xml文件 7
2.4.1 一开始是根元素 8
2.4.2 权限、编排和应用程序 8
2.4.3 应用程序总要做点什么 9
2.4.4 确保最大兼容性 10
2.4.5 版本=控制 10
2.5 模拟器和目标 11
2.5.1 虚拟设备 11
2.5.2 设定目标 13
第3章 简单的应用程序 14
3.1 创建项目 14
3.2 剖析Activity 15
3.3 构建和运行Activity 17
第4章 基于XML的布局 18
4.1 何谓基于XML的布局 18
4.2 为什么使用基于XML的布局 18
4.3 举个例子 19
4.4 什么时候加@符号 20
4.5 怎样在Java中使用布局文件 20
4.6 把故事讲完 20
第5章 使用基本的部件 22
5.1 标签 22
5.2 按钮 23
5.3 图像 23
5.4 字段 24
5.5 复选框 25
5.6 单选按钮 27
5.7 视图 28
5.7.1 特性 28
5.7.2 方法 29
5.7.3 颜色 29
第6章 使用容器 30
6.1 线性布局 30
6.1.1 LinearLayout的概念和特性 30
6.1.2 LinearLayout示例 33
6.2 相对布局 36
6.2.1 RelativeLayout的概念和属性 36
6.2.2 RelativeLayout示例 37
6.3 表格布局 40
6.3.1 TableLayout的概念和特性 40
6.3.2 TableLayout示例 42
6.4 滚动 42
第7章 使用选择部件 45
7.1 适配器 45
7.2 列表 46
7.3 微调控件 49
7.4 网格 51
7.5 自动完成字段(至少减少35%的输入) 53
7.6 画廊 55
第8章 使用列表 57
8.1 初步改进 57
8.2 动态列表 58
8.3 更好,更快,更强 60
8.3.1 使用convertView 61
8.3.2 使用持有者模式 62
8.4 交互式列表 64
8.5 可重用列表 68
8.6 选用其他适配器 74
第9章 高级部件和容器 75
9.1 选择日期和时间 75
9.2 时钟 78
9.3 进度条 79
9.4 滑动选择 79
9.5 选项卡 80
9.5.1 构建 80
9.5.2 规则 80
9.5.3 使用 81
9.5.4 增强 83
9.5.5 Intent和View 84
9.6 翻转 85
9.6.1 手工翻转 86
9.6.2 动态添加内容 87
9.6.3 自动翻转 88
9.7 滑动的抽屉 89
9.8 其他容器 91
第10章 输入法框架 92
10.1 键盘,硬还是软 92
10.2 按需定制 92
10.3 修改附属键 95
10.4 适应布局 96
10.5 释放创造力 97
第11章 使用菜单 98
11.1 选项菜单 98
11.1.1 创建选项菜单 98
11.1.2 添加菜单项和子菜单 99
11.2 上下文菜单 100
11.3 简单的示例 100
11.4 扩展的示例 104
11.4.1 菜单的XML结构 104
11.4.2 菜单项与XML 105
11.4.3 创建菜单 106
第12章 字体 107
12.1 珍惜已有字体 107
12.2 更多字体 108
12.3 字形介绍 109
第13章 嵌入WebKit浏览器 111
13.1 小型浏览器 111
13.2 加载内容 112
13.3 导航内容 113
13.4 扩展应用程序 114
13.5 设置、首选项和选项 115
第14章 显示弹出消息 116
14.1 弹出Toast 116
14.2 提醒框 117
14.3 检查效果 117
第15章 处理线程 120
15.1 了解处理程序 120
15.1.1 消息 120
15.1.2 Runnable 123
15.2 就地运行 123
15.3 我的UI线程到哪去了 123
15.4 异步观感 123
15.4.1 原理 124
15.4.2 AsyncTask、泛型和Vararg 124
15.4.3 AsyncTask的各个阶段 125
15.4.4 示例任务 125
15.5 附加说明 129
第16章 处理Activity生命周期事件 130
16.1 Activity的状态 130
16.2 Activity的生命周期 131
16.2.1 onCreate()和onDestroy() 131
16.2.2 onStart()、onRestart()和onStop() 131
16.2.3 onPause()和onResume() 131
16.3 优美的状态 132
第17章 创建Intent过滤器 133
17.1 你有什么意图 133
17.1.1 Intent组成 133
17.1.2 Intent路由 134
17.2 叙述Intent 135
17.3 缩小接收器范围 136
17.4 暂停警告 137
第18章 启动活动和子活动 138
18.1 对等活动和子活动 138
18.2 启动 139
18.2.1 制作Intent 139
18.2.2 进行调用 139
18.3 多标签浏览 142
第19章 处理旋转 145
19.1 销毁问题 145
19.2 异同 145
19.3 更多保存 149
19.4 DIY旋转 151
19.5 强制解决问题 152
19.6 综述 154
第20章 处理资源 156
20.1 资源 156
20.2 字符串理论 156
20.2.1 纯文本字符串 157
20.2.2 字符串格式 157
20.2.3 样式文本 157
20.2.4 样式字符串格式 158
20.3 获取图片 160
20.4 XML:资源之路 162
20.5 杂项 164
20.5.1 维度 164
20.5.2 颜色 165
20.5.3 数组 165
20.5.4 因人而异 166
第21章 使用首选项 171
21.1 获取想要的内容 171
21.2 编辑首选项 172
21.3 目前的框架 172
21.4 让用户自己选择 173
21.5 添加“分层”结构 176
21.6 弹出对话框 177
第22章 管理和访问本地数据库 180
22.1 数据库示例 180
22.2 SQLite快速入门 181
22.3 从头开始 182
22.4 设置表 184
22.5 数据 184
22.6 有因必有果 185
22.6.1 Raw查询 186
22.6.2 常规查询 186
22.6.3 使用构造器进行构建 186
22.6.4 使用Cursor 187
22.7 无所不在的数据 188
第23章 访问文件 190
23.1 使用的数据 190
23.2 读取与写入 192
第24章 充分利用Java库 196
24.1 外部限制 196
24.2 Ant和JAR 197
24.3 参照脚本 197
24.4 滴酒不沾 200
24.5 评审脚本 200
第25章 通过Internet进行通信 201
25.1 REST和Relaxation 201
25.2 通过Apache HttpClient操作HTTP 201
25.3 解析响应 203
25.4 要考虑的问题 205
第26章 使用内容提供程序 206
26.1 数据片段 206
26.2 获得句柄 207
26.3 查询 207
26.4 适应环境 208
26.5 舍与得 209
26.6 感知BLOB 210
第27章 构建内容提供程序 211
27.1 剖析 211
27.2 类型 212
27.3 创建内容提供程序 212
27.3.1 第一步:创建提供程序类 212
27.3.2 第二步:提供URI 217
27.3.3 第三步:声明属性 218
27.3.4 第四步:更新清单文件 218
27.4 更改通知支持 219
第28章 请求和要求许可 220
28.1 请求许可 220
28.2 声明许可 221
28.2.1 通过清单文件强制实施许可 222
28.2.2 在其他地方强制实施许可 222
28.3 别忘了文档 223
第29章 创建服务 224
29.1 通过类创建服务 224
29.2 单例 225
29.3 清单文件的作用 226
29.4 事件提醒 227
29.4.1 回调 227
29.4.2 广播Intent 228
29.5 远程服务与其他代码 229
第30章 调用服务 230
30.1 联系的纽带 230
30.2 接收广播内容 232
第31章 利用通知提醒用户 234
31.1 发布通知的类型 234
31.1.1 硬件通知 235
31.1.2 图标 235
31.2 查看运行中的通知发布 235
第32章 访问基于位置的服务 238
32.1 位置提供程序:它们知道你藏在哪里 238
32.2 自我定位 239
32.3 移动 240
32.4 我们到了吗 241
32.5 测试 241
第33章 使用MapView和MapActivity显示地图 242
33.1 条款无情 242
33.2 添加项问题 242
33.3 基本要素 243
33.4 练习控制 244
33.4.1 缩放 244
33.4.2 居中 245
33.5 地形起伏 245
33.6 层上加层 245
33.6.1 Overlay类 246
33.6.2 绘制ItemizedOverlay 246
33.6.3 处理屏幕单击 247
33.7 MyLocationOverlay 248
33.8 关键所在 249
第34章 呼叫处理 250
34.1 向管理者报告 250
34.2 亲自进行呼叫 250
第35章 开发工具 253
35.1 层次结构管理 253
35.2 令人愉快的Dalvik调试详细演示 257
35.2.1 日志记录 259
35.2.2 文件推拉 259
35.2.3 屏幕截图 260
35.2.4 位置更新 260
35.2.5 接入呼叫和消息 261
35.3 存储卡 262
35.3.1 创建卡的映像 262
35.3.2 插入卡 263
第36章 处理多种屏幕尺寸 264
36.1 默认设置 264
36.2 多合一 265
36.2.1 考虑规则,而不是位置 265
36.2.2 考虑物理尺寸 266
36.2.3 避免使用实际像素 266
36.2.4 选择可缩放的Drawable 266
36.3 量身定制 267
36.3.1 添加<supports-screens> 267
36.3.2 资源和资源集 268
36.3.3 查找尺寸 268
36.4 一切都是模拟的 269
36.4.1 密度不同 269
36.4.2 调整密度 270
36.4.3 访问实际设备 270
36.5 充分利用形势 271
36.5.1 用按钮代替菜单 271
36.5.2 使用简单的Activity代替选项卡 271
36.5.3 整合多个Activity 272
36.6 示例:EU4You 272
36.6.1 第一个版本 272
36.6.2 固定字体大小 277
36.6.3 固定大小的图标 278
36.6.4 使用空间 278
36.6.5 不是浏览器会怎样 279
36.7 合作伙伴的错误有哪些 280
第37章 手机的处理 281
37.1 该应用程序包含显式指令 281
37.2 按钮 282
37.3 有保障的市场 282
37.4 细枝末节 283
37.4.1 Archos 5 Android Internet Tablet 283
37.4.2 Motorola CLIQ/DEXT 284
37.4.3 Motorola DROID/Milestone 284
37.4.4 Google/HTC Nexus One 284
37.4.5 Motorola BACKFLIP 284
第38章 处理平台变更 285
38.1 品牌管理 285
38.2 让人头疼的更多问题 286
38.2.1 视图层次结构 286
38.2.2 变更资源 287
38.3 处理API变更 287
38.3.1 检测版本 287
38.3.2 包装API 287
第39章 未来何去何从 292
39.1 问题——部分答案 292
39.2 源代码 292
39.3 获得最新的信息 293