Android编程权威指南(第3版)

Android编程权威指南(第3版)
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者:
2017-06
版次: 3
ISBN: 9787115457592
定价: 129.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 576页
正文语种: 简体中文
220人买过
  •      Big Nerd Ranch是美国一家专业的移动开发技术培训机构。本书主要以其Android训练营教学课程为基础,融合了几位作者多年的心得体会,是一本完全面向实战的Android编程**指南。全书共36章,详细介绍了8个Android应用的开发过程。通过这些精心设计的应用,读者可掌握很多重要的理论知识和开发技巧,获得宝贵的开发经验。第3版较之前版本增加了对数据绑定等新工具的介绍,同时新增了针对单元测试、辅助功能和MVVM架构等主题的章节。   BillPhillips,BigNerdRanch资深讲师。他与人合作开发了广受好评的Android训练营培训课程,并为之编写教材(包括本书的第1版和第2版)。Bill一直坚持撰写博客、阅读各类文学作品、作曲奏乐以及著书。
      ChrisStewart,BigNerdRanch的Android团队主管、Android训练营资深讲师。他致力于不断取得进步和精进技能。工作之余,Chris喜欢远足和旅行。
      KristinMarsicano,BigNerdRanch资深讲师、Android开发者。她喜欢分享知识,对学习、软件开发以及二者的交集充满热情。在授课和开发应用之余,Kristin会为家人烹调美食、练习瑜伽或学习新知识。
      王明发,毕业于华东理工大学。软件开发及项目管理者,拥有近十年的软件开发及项目管理经验;除了翻译本书前两版之外,另译有《写给大家看的项目管理书(第3版)》。 第1章 Android 开发初体验 1
    1.1 Android 开发基础 2
    1.2 创建Android 项目 2
    1.3 Android Studio 使用导航 6
    1.4 用户界面设计 6
    1.4.1 视图层级结构 10
    1.4.2 组件属性 10
    1.4.3 创建字符串资源 11
    1.4.4 预览布局 12
    1.5 从布局XML 到视图对象 13
    1.6 组件的实际应用 16
    1.6.1 引用组件 17
    1.6.2 设置监听器17
    1.7 创建提示消息 19
    1.8 使用模拟器运行应用 21
    1.9 深入学习:Android 编译过程 23
    1.10 关于挑战练习 25
    1.11 挑战练习:定制toast 消息 25

    第2章 Android 与MVC 设计模式 26
    2.1 创建新类 26
    2.2 Android 与MVC 设计模式 29
    2.3 更新视图层 31
    2.4 更新控制器层 33
    2.5 在物理设备上运行应用 37
    2.5.1 连接设备 37
    2.5.2 配置设备用于应用开发 7
    2.6 添加图标资源 38
    2.6.1 向项目中添加资源 39
    2.6.2 在XML 文件中引用资源 41
    2.7 挑战练习:为TextView 添加监听器 42
    2.8 挑战练习:添加后退按钮 42
    2.9 挑战练习:从按钮到图标按钮 42

    第3章 activity 的生命周期 45
    3.1 日志跟踪理解activity 生命周期 46
    3.1.1 输出日志信息 46
    3.1.2 使用LogCat 48
    3.1.3 activity 生命周期实例解析 50
    3.2 设备旋转与activity 生命周期 52
    3.3 保存数据以应对设备旋转 56
    3.4 再探activity 生命周期 58
    3.5 深入学习:activity 内存清理现状 59
    3.6 深入学习:日志记录的级别与方法 60
    3.7 挑战练习:禁止一题多答 61
    3.8 挑战练习:评分 61

    第4章 Android 应用的调试 62
    4.1 异常与栈跟踪 63
    4.1.1 诊断应用异常 64
    4.1.2 记录栈跟踪日志 65
    4.1.3 设置断点 66
    4.1.4 使用异常断点 68
    4.2 Android 特有的调试工具 70
    4.2.1 使用Android Lint 70
    4.2.2 R类的问题 71
    4.3 挑战练习:探索布局检查器 72
    4.4 挑战练习:探索内存分配跟踪 72

    第5章 第二个activity 74
    5.1 创建第二个activity 75
    5.1.1 创建新的activity 75
    5.1.2 创建新的activity子类 78
    5.1.3 在manifest配置文件中声明activity 78
    5.1.4 为QuizActivity 添加CHEAT按钮 79
    5.2 启动activity 81
    5.3 activity间的数据传递 83
    5.3.1 使用intent extra 83
    5.3.2 从子activity获取返回结果 86
    5.4 activity 的使用与管理 91
    5.5 挑战练习:堵住漏洞 93

    第6章 Android SDK版本与兼容 94
    6.1 Android SDK版本 94
    6.2 Android编程与兼容性问题 95
    6.2.1 比较合理的版本 95
    6.2.2 SDK最低版本 96
    6.2.3 SDK目标版本 97
    6.2.4 SDK编译版本 97
    6.2.5 安全添加新版本API中的代码 97
    6.3 使用Android开发者文档 100
    6.4 挑战练习:报告编译版本 101
    6.5 挑战练习:限制作弊次数 102

    第7章 UI fragment 与fragment管理器 103
    7.1 UI设计的灵活性需求 104
    7.2 引入fragment 104
    7.3 着手开发CriminalIntent 105
    7.3.1 创建新项目 107
    7.3.2 两类fragment 108
    7.3.3 在Android Studio中增加依赖关系 108
    7.3.4 创建Crime类 111
    7.4 托管UI fragment 112
    7.4.1 fragment的生命周期 112
    7.4.2 托管的两种方式 113
    7.4.3 定义容器视图 113
    7.5 创建UI fragment 115
    7.5.1 定义CrimeFragment的布局 115
    7.5.2 创建CrimeFragment类 117
    7.6 向FragmentManager添加UI fragment 122
    7.6.1 fragment事务 123
    7.6.2 FragmentManager 与fragment生命周期 125
    7.7 采用fragment的应用架构 126
    7.8 深入学习:fragment与支持库 127
    7.9 深入学习:为什么优先使用支持库版fragment 128

    第8章 使用RecyclerView显示列表 129
    8.1 升级CriminalIntent应用的模型层 130
    8.2 使用抽象activity托管fragment 132
    8.2.1 通用型fragment托管布局 133
    8.2.2 抽象activity类 133
    8.3 RecyclerView、ViewHolder 和Adapter 137
    8.3.1 ViewHolder和Adapter 138
    8.3.2 使用RecyclerView 141
    8.3.3 列表项视图 142
    8.3.4 实现ViewHolder和Adapter 143
    8.4 绑定列表项 145
    8.5 响应点击 147
    8.6 深入学习:ListView和GridView 148
    8.7 深入学习:单例 148
    8.8 挑战练习:RecyclerView ViewType 149

    第9章 使用布局与组件创建用户界面 150
    9.1 使用图形布局工具 151
    9.2 引入ConstraintLayout 151
    9.2.1 使用ConstraintLayout 152
    9.2.2 约束编辑器 153
    9.2.3 腾出空间 155
    9.2.4 添加组件 157
    9.2.5 约束的XML形式 159
    9.2.6 编辑属性 160
    9.2.7 动态设置列表项 162
    9.3 深入学习布局属性 163
    9.3.1 dp、sp以及屏幕像素密度 163
    9.3.2 边距与内边距 165
    9.3.3 样式、主题及主题属性 166
    9.3.4 Android应用的设计原则 166
    9.4 图形布局工具使用小结 167
    9.5 挑战练习:日期格式化 167

    第10章 使用fragment argument 168
    10.1 从fragment 中启动activity 168
    10.1.1 附加extra信息 169
    10.1.2 获取extra信息 170
    10.1.3 使用Crime数据更新CrimeFragment视图 171
    10.1.4 直接获取extra信息的缺点 172
    10.2 fragment argument 172
    10.2.1 附加argument给fragment 173
    10.2.2 获取argument 174
    10.3 刷新显示列表项 174
    10.4 通过fragment获取返回结果 176
    10.5 深入学习:为何要用fragment argument 177
    10.6 挑战练习:实现高效的RecyclerView刷新 178
    10.7 挑战练习:优化CrimeLab的表现 178

    第11章 使用ViewPager 179
    11.1 创建CrimePagerActivity 180
    11.1.1 ViewPager与PagerAdapter 181
    11.1.2 整合并配置使用CrimePagerActivity 182
    11.2 FragmentStatePagerAdapter与FragmentPagerAdapter 184
    11.3 深入学习:ViewPager的工作原理 186
    11.4 深入学习:以代码的方式创建视图 187
    11.5 挑战练习:恢复CrimeFragment的边距 187
    11.6 挑战练习:添加Jump to First按钮和Jump to Last按钮 188

    第12章 对话框 189
    12.1 创建DialogFragment 190
    12.1.1 显示DialogFragment 192
    12.1.2 设置对话框的显示内容 194
    12.2 fragment间的数据传递 196
    12.2.1 传递数据给DatePickerFragment 197
    12.2.2 返回数据给CrimeFragment 199
    12.3 挑战练习:更多对话框 205
    12.4 挑战练习:实现响应式DialogFragment 205

    第13章 工具栏 207
    13.1 AppCompat 207
    13.2 工具栏菜单 209
    13.2.1 在XML文件中定义菜单 210
    13.2.2 创建菜单 214
    13.2.3 响应菜单项选择 217
    13.3 实现层级式导航 218
    13.4 可选菜单项 219
    13.4.1 切换菜单项标题 220
    13.4.2 “还有个问题” 222
    13.5 深入学习:工具栏与操作栏 224
    13.6 挑战练习:删除crime记录 224
    13.7 挑战练习:复数字符串资源 224
    13.8 挑战练习:用于RecyclerView的空视图 225

    第14章 SQLite数据库 226
    14.1 定义schema 226
    14.2 创建初始数据库 227
    14.2.1 使用Android Device Monitor查看文件 230
    14.2.2 处理数据库相关问题 231
    14.3 修改CrimeLab类 232
    14.4 写入数据库 233
    14.4.1 使用ContentValues 233
    14.4.2 插入和更新记录 234
    14.5 读取数据库 235
    14.5.1 使用CursorWrapper 236
    14.5.2 创建模型层对象 238
    14.6 深入学习:数据库高级主题介绍 241
    14.7 深入学习:应用上下文 241
    14.8 挑战练习:删除crime记录 242

    第15章 隐式intent 243
    15.1 添加按钮组件 244
    15.2 添加嫌疑人信息至模型层 244
    15.3 使用格式化字符串 246
    15.4 使用隐式intent 248
    15.4.1 隐式intent的组成 248
    15.4.2 发送消息 249
    15.4.3 获取联系人信息 252
    15.4.4 检查可响应任务的activity 254
    15.5 挑战练习:ShareCompat 256
    15.6 挑战练习:又一个隐式intent 256

    第16章 使用intent拍照 258
    16.1 布置照片 258
    16.2 文件存储 260
    16.2.1 使用FileProvider 261
    16.2.2 指定照片存放位置 262
    16.3 使用相机intent 263
    16.4 缩放和显示位图 265
    16.5 功能声明 268
    16.6 挑战练习:优化照片显示 269
    16.7 挑战练习:优化缩略图加载 269

    第17章 双版面主从用户界面 270
    17.1 增加布局灵活性 271
    17.1.1 修改SingleFragmentActivity 272
    17.1.2 创建包含两个fragment容器的布局 272
    17.1.3 使用别名资源 274
    17.1.4 创建平板设备专用可选资源 275
    17.2 activity:fragment的托管者 276
    17.3 深入学习:设备屏幕尺寸的确定 284
    17.4 挑战练习:添加滑动删除功能 285

    第18章 应用本地化 286
    18.1 资源本地化 286
    18.1.1 默认资源 289
    18.1.2 检查资源本地化完成情况 291
    18.1.3 区域修饰符 292
    18.2 配置修饰符 294
    18.2.1 可用资源优先级排定 295
    18.2.2 多重配置修饰符 296
    18.2.3 寻找最匹配的资源 297
    18.3 测试备选资源 298
    18.4 挑战练习:日期本地化 298

    第19章 Android辅助功能 299
    19.1 TalkBack 299
    19.1.1 点击浏览 301
    19.1.2 线性浏览 301
    19.2 实现非文字型元素可读 303
    19.2.1 添加内容描述 303
    19.2.2 实现组件可聚焦 305
    19.3 提升辅助体验 305
    19.4 深入学习:使用辅助功能扫描器 309
    19.5 挑战练习:优化列表项 311
    19.6 挑战练习:补全上下文信息 311
    19.7 挑战练习:事件主动通知 311

    第20章 数据绑定与MVVM 313
    20.1 为何要用MVVM 架构 314
    20.2 创建BeatBox应用 314
    20.3 导入assets 319
    20.4 处理assets 321
    20.5 使用assets 323
    20.6 绑定数据 325
    20.6.1 创建视图模型 327
    20.6.2 绑定至视图模型 328
    20.6.3 绑定数据观察 330
    20.7 访问assets 332
    20.8 深入学习:数据绑定再探 333
    20.8.1 lambda表达式 333
    20.8.2 更多语法糖 333
    20.8.3 BindingAdapter 333
    20.9 深入学习:为何使用assets 334
    20.10 深入学习:什么是non-assets 334

    第21章 音频播放与单元测试 335
    21.1 创建SoundPool 335
    21.2 加载音频文件 336
    21.3 播放音频 337
    21.4 添加测试依赖 338
    21.5 创建测试类 339
    21.6 实现测试类341
    21.7 编写测试方法 342
    21.8 数据绑定回调 346
    21.9 释放音频 346
    21.10 设备旋转和对象保存 347
    21.10.1 保留fragment 348
    21.10.2 设备旋转和已保留的fragment 349
    21.11 深入学习:是否保留fragment 351
    21.12 深入学习:Espresso与整合测试 351
    21.13 深入学习:虚拟对象与测试 352
    21.14 挑战练习:播放进度控制 353

    第22章 样式与主题 354
    22.1 颜色资源 354
    22.2 样式 355
    22.3 主题 357
    22.4 添加主题颜色 359
    22.5 覆盖主题属性 361
    22.6 修改按钮属性 364
    22.7 深入学习:样式继承拾遗 367
    22.8 深入学习:引用主题属性 367

    第23章 XML drawable 368
    23.1 统一按钮样式 368
    23.2 shape drawable 369
    23.3 state list drawable 371
    23.4 layer list drawable 372
    23.5 深入学习:为什么要用XML drawable 373
    23.6 深入学习:使用mipmap图像 374
    23.7 深入学习:使用9-patch图像 375
    23.8 挑战练习:按钮主题 379

    第24章 深入学习intent和任务 380
    24.1 创建NerdLauncher项目 380
    24.2 解析隐式intent 382
    24.3 在运行时创建显式intent 386
    24.4 任务与回退栈 388
    24.4.1 在任务间切换 389
    24.4.2 启动新任务 389
    24.5 使用NerdLauncher应用作为设备主屏幕 392
    24.6 挑战练习:应用图标 393
    24.7 深入学习:进程与任务 393
    24.8 深入学习:并发文档 395

    第25章 HTTP与后台任务 398
    25.1 创建PhotoGallery应用 399
    25.2 网络连接基本 401
    25.3 使用AsyncTask在后台线程上运行代码 403
    25.4 线程与主线程 405
    25.5 从Flickr获取JSON数据 407
    25.6 从AsyncTask回到主线程 413
    25.7 清理AsyncTask 416
    25.8 深入学习:AsyncTask再探 416
    25.9 深入学习:AsyncTask的替代方案 417
    25.10 挑战练习:Gson 418
    25.11 挑战练习:分页 418
    25.12 挑战练习:动态调整网格列 418

    第26章 Looper、Handler和HandlerThread 420
    26.1 配置RecyclerView以显示图片 420
    26.2 批量下载缩略图 422
    26.3 与主线程通信 423
    26.4 创建并启动后台线程 424
    26.5 Message 与message handler 426
    26.5.1 剖析Message 426
    26.5.2 剖析Handler 427
    26.5.3 使用handler 428
    26.5.4 传递handler 431
    26.6 深入学习:AsyncTask与线程 436
    26.7 深入学习:解决图片下载问题 436
    26.8 深入学习:StrictMode 437
    26.9 挑战练习:预加载以及缓存 438

    第27章 搜索 439
    27.1 搜索Flickr网站 439
    27.2 使用SearchView 443
    27.3 使用shared preferences实现轻量级数据存储 447
    27.4 优化应用 451
    27.5 挑战练习:深度优化PhotoGallery应用 451

    第28章 后台服务 452
    28.1 创建IntentService 452
    28.2 服务的作用 454
    28.3 查找最新返回结果 456
    28.4 使用AlarmManager延迟运行服务 458
    28.4.1 合理控制服务启动的频度 460
    28.4.2 PendingIntent 461
    28.4.3 使用PendingIntent管理定时器 461
    28.5 控制定时器 462
    28.6 通知信息 464
    28.7 挑战练习:可穿戴设备上的通知 466
    28.8 深入学习:服务之细节 467
    28.8.1 服务的能与不能 467
    28.8.2 服务的生命周期 467
    28.8.3 non-sticky服务 467
    28.8.4 sticky服务 468
    28.8.5 绑定服务 468
    28.9 深入学习:JobScheduler 和JobService 469
    28.10 挑战练习:在Lollipop设备上使用JobService 472
    28.11 深入学习:sync adapter 472

    第29章 broadcast intent 474
    29.1 普通intent和broadcast intent 474
    29.2 接收系统broadcast:重启后唤醒 475
    29.2.1 创建并登记standalone receiver 475
    29.2.2 使用receiver 477
    29.3 过滤前台通知消息 479
    29.3.1 发送broadcast intent 479
    29.3.2 创建并登记动态receiver 480
    29.3.3 使用私有权限限制broadcast 482
    29.3.4 使用有序broadcast收发数据 484
    29.4 receiver与长时运行任务 488
    29.5 深入学习:本地事件 488
    29.5.1 使用EventBus 489
    29.5.2 使用RxJava 490
    29.6 深入学习:探测fragment的状态 490

    第30章 网页浏览 492
    30.1 最后一段Flickr数据 492
    30.2 简单方式:隐式intent 494
    30.3 较难方式:使用WebView 496
    30.4 处理WebView的设备旋转问题 502
    30.5 深入学习:注入JavaScript对象 502
    30.6 深入学习:WebView升级 503
    30.7 挑战练习:使用后退键浏览历史网页 504
    30.8 挑战练习:非HTTP链接支持 504

    第31章 定制视图与触摸事件 505
    31.1 创建DragAndDraw项目 505
    31.2 创建定制视图 507
    31.3 处理触摸事件 509
    31.4 onDraw(...)方法内的图形绘制 513
    31.5 挑战练习:设备旋转问题 515
    31.6 挑战练习:旋转矩形框 515

    第32章 属性动画 516
    32.1 建立场景 516
    32.2 简单属性动画 519
    32.2.1 视图属性转换 521
    32.2.2 使用不同的interpolator 523
    32.2.3 色彩渐变 523
    32.3 播放多个动画 525
    32.4 深入学习:其他动画API 527
    32.4.1 传统动画工具 527
    32.4.2 转场 527
    32.5 挑战练习 527

    第33章 地理位置和Play服务 528
    33.1 地理位置和定位类库 528
    33.2 创建Locatr项目 529
    33.3 Play服务定位和模拟器 530
    33.4 创建Locatr应用 532
    33.5 配置Google Play服务 534
    33.6 使用Google Play服务 536
    33.7 基于地理位置的Flickr搜索 538
    33.8 获取定位数据 539
    33.9 获取运行时权限 542
    33.10 寻找并显示图片 546
    33.11 挑战练习:权限使用理由 548
    33.12 挑战练习:进度指示器 549

    第34章 使用地图 550
    34.1 导入Play地图服务库 550
    34.2 Android上的地图服务 550
    34.3 获取Maps API key 550
    34.4 创建地图 552
    34.5 获取更多地理位置数据 553
    34.6 使用地图 556
    34.7 深入学习:团队开发和API key 560

    第35章 material design 562
    35.1 material surface 562
    35.1.1 elevation和Z值 564
    35.1.2 state list animator 565
    35.2 动画工具 566
    35.2.1 circular reveal 567
    35.2.2 shared element transition 568
    35.3 新的视图组件 571
    35.3.1 card 571
    35.3.2 floating action button 572
    35.3.3 snackbar 573
    35.4 深入学习material design 574

    第36章 编后语 575
    36.1 终极挑战 575
    36.2 关于我们 575
    36.3 致谢 576
  • 内容简介:
         Big Nerd Ranch是美国一家专业的移动开发技术培训机构。本书主要以其Android训练营教学课程为基础,融合了几位作者多年的心得体会,是一本完全面向实战的Android编程**指南。全书共36章,详细介绍了8个Android应用的开发过程。通过这些精心设计的应用,读者可掌握很多重要的理论知识和开发技巧,获得宝贵的开发经验。第3版较之前版本增加了对数据绑定等新工具的介绍,同时新增了针对单元测试、辅助功能和MVVM架构等主题的章节。
  • 作者简介:
      BillPhillips,BigNerdRanch资深讲师。他与人合作开发了广受好评的Android训练营培训课程,并为之编写教材(包括本书的第1版和第2版)。Bill一直坚持撰写博客、阅读各类文学作品、作曲奏乐以及著书。
      ChrisStewart,BigNerdRanch的Android团队主管、Android训练营资深讲师。他致力于不断取得进步和精进技能。工作之余,Chris喜欢远足和旅行。
      KristinMarsicano,BigNerdRanch资深讲师、Android开发者。她喜欢分享知识,对学习、软件开发以及二者的交集充满热情。在授课和开发应用之余,Kristin会为家人烹调美食、练习瑜伽或学习新知识。
      王明发,毕业于华东理工大学。软件开发及项目管理者,拥有近十年的软件开发及项目管理经验;除了翻译本书前两版之外,另译有《写给大家看的项目管理书(第3版)》。
  • 目录:
    第1章 Android 开发初体验 1
    1.1 Android 开发基础 2
    1.2 创建Android 项目 2
    1.3 Android Studio 使用导航 6
    1.4 用户界面设计 6
    1.4.1 视图层级结构 10
    1.4.2 组件属性 10
    1.4.3 创建字符串资源 11
    1.4.4 预览布局 12
    1.5 从布局XML 到视图对象 13
    1.6 组件的实际应用 16
    1.6.1 引用组件 17
    1.6.2 设置监听器17
    1.7 创建提示消息 19
    1.8 使用模拟器运行应用 21
    1.9 深入学习:Android 编译过程 23
    1.10 关于挑战练习 25
    1.11 挑战练习:定制toast 消息 25

    第2章 Android 与MVC 设计模式 26
    2.1 创建新类 26
    2.2 Android 与MVC 设计模式 29
    2.3 更新视图层 31
    2.4 更新控制器层 33
    2.5 在物理设备上运行应用 37
    2.5.1 连接设备 37
    2.5.2 配置设备用于应用开发 7
    2.6 添加图标资源 38
    2.6.1 向项目中添加资源 39
    2.6.2 在XML 文件中引用资源 41
    2.7 挑战练习:为TextView 添加监听器 42
    2.8 挑战练习:添加后退按钮 42
    2.9 挑战练习:从按钮到图标按钮 42

    第3章 activity 的生命周期 45
    3.1 日志跟踪理解activity 生命周期 46
    3.1.1 输出日志信息 46
    3.1.2 使用LogCat 48
    3.1.3 activity 生命周期实例解析 50
    3.2 设备旋转与activity 生命周期 52
    3.3 保存数据以应对设备旋转 56
    3.4 再探activity 生命周期 58
    3.5 深入学习:activity 内存清理现状 59
    3.6 深入学习:日志记录的级别与方法 60
    3.7 挑战练习:禁止一题多答 61
    3.8 挑战练习:评分 61

    第4章 Android 应用的调试 62
    4.1 异常与栈跟踪 63
    4.1.1 诊断应用异常 64
    4.1.2 记录栈跟踪日志 65
    4.1.3 设置断点 66
    4.1.4 使用异常断点 68
    4.2 Android 特有的调试工具 70
    4.2.1 使用Android Lint 70
    4.2.2 R类的问题 71
    4.3 挑战练习:探索布局检查器 72
    4.4 挑战练习:探索内存分配跟踪 72

    第5章 第二个activity 74
    5.1 创建第二个activity 75
    5.1.1 创建新的activity 75
    5.1.2 创建新的activity子类 78
    5.1.3 在manifest配置文件中声明activity 78
    5.1.4 为QuizActivity 添加CHEAT按钮 79
    5.2 启动activity 81
    5.3 activity间的数据传递 83
    5.3.1 使用intent extra 83
    5.3.2 从子activity获取返回结果 86
    5.4 activity 的使用与管理 91
    5.5 挑战练习:堵住漏洞 93

    第6章 Android SDK版本与兼容 94
    6.1 Android SDK版本 94
    6.2 Android编程与兼容性问题 95
    6.2.1 比较合理的版本 95
    6.2.2 SDK最低版本 96
    6.2.3 SDK目标版本 97
    6.2.4 SDK编译版本 97
    6.2.5 安全添加新版本API中的代码 97
    6.3 使用Android开发者文档 100
    6.4 挑战练习:报告编译版本 101
    6.5 挑战练习:限制作弊次数 102

    第7章 UI fragment 与fragment管理器 103
    7.1 UI设计的灵活性需求 104
    7.2 引入fragment 104
    7.3 着手开发CriminalIntent 105
    7.3.1 创建新项目 107
    7.3.2 两类fragment 108
    7.3.3 在Android Studio中增加依赖关系 108
    7.3.4 创建Crime类 111
    7.4 托管UI fragment 112
    7.4.1 fragment的生命周期 112
    7.4.2 托管的两种方式 113
    7.4.3 定义容器视图 113
    7.5 创建UI fragment 115
    7.5.1 定义CrimeFragment的布局 115
    7.5.2 创建CrimeFragment类 117
    7.6 向FragmentManager添加UI fragment 122
    7.6.1 fragment事务 123
    7.6.2 FragmentManager 与fragment生命周期 125
    7.7 采用fragment的应用架构 126
    7.8 深入学习:fragment与支持库 127
    7.9 深入学习:为什么优先使用支持库版fragment 128

    第8章 使用RecyclerView显示列表 129
    8.1 升级CriminalIntent应用的模型层 130
    8.2 使用抽象activity托管fragment 132
    8.2.1 通用型fragment托管布局 133
    8.2.2 抽象activity类 133
    8.3 RecyclerView、ViewHolder 和Adapter 137
    8.3.1 ViewHolder和Adapter 138
    8.3.2 使用RecyclerView 141
    8.3.3 列表项视图 142
    8.3.4 实现ViewHolder和Adapter 143
    8.4 绑定列表项 145
    8.5 响应点击 147
    8.6 深入学习:ListView和GridView 148
    8.7 深入学习:单例 148
    8.8 挑战练习:RecyclerView ViewType 149

    第9章 使用布局与组件创建用户界面 150
    9.1 使用图形布局工具 151
    9.2 引入ConstraintLayout 151
    9.2.1 使用ConstraintLayout 152
    9.2.2 约束编辑器 153
    9.2.3 腾出空间 155
    9.2.4 添加组件 157
    9.2.5 约束的XML形式 159
    9.2.6 编辑属性 160
    9.2.7 动态设置列表项 162
    9.3 深入学习布局属性 163
    9.3.1 dp、sp以及屏幕像素密度 163
    9.3.2 边距与内边距 165
    9.3.3 样式、主题及主题属性 166
    9.3.4 Android应用的设计原则 166
    9.4 图形布局工具使用小结 167
    9.5 挑战练习:日期格式化 167

    第10章 使用fragment argument 168
    10.1 从fragment 中启动activity 168
    10.1.1 附加extra信息 169
    10.1.2 获取extra信息 170
    10.1.3 使用Crime数据更新CrimeFragment视图 171
    10.1.4 直接获取extra信息的缺点 172
    10.2 fragment argument 172
    10.2.1 附加argument给fragment 173
    10.2.2 获取argument 174
    10.3 刷新显示列表项 174
    10.4 通过fragment获取返回结果 176
    10.5 深入学习:为何要用fragment argument 177
    10.6 挑战练习:实现高效的RecyclerView刷新 178
    10.7 挑战练习:优化CrimeLab的表现 178

    第11章 使用ViewPager 179
    11.1 创建CrimePagerActivity 180
    11.1.1 ViewPager与PagerAdapter 181
    11.1.2 整合并配置使用CrimePagerActivity 182
    11.2 FragmentStatePagerAdapter与FragmentPagerAdapter 184
    11.3 深入学习:ViewPager的工作原理 186
    11.4 深入学习:以代码的方式创建视图 187
    11.5 挑战练习:恢复CrimeFragment的边距 187
    11.6 挑战练习:添加Jump to First按钮和Jump to Last按钮 188

    第12章 对话框 189
    12.1 创建DialogFragment 190
    12.1.1 显示DialogFragment 192
    12.1.2 设置对话框的显示内容 194
    12.2 fragment间的数据传递 196
    12.2.1 传递数据给DatePickerFragment 197
    12.2.2 返回数据给CrimeFragment 199
    12.3 挑战练习:更多对话框 205
    12.4 挑战练习:实现响应式DialogFragment 205

    第13章 工具栏 207
    13.1 AppCompat 207
    13.2 工具栏菜单 209
    13.2.1 在XML文件中定义菜单 210
    13.2.2 创建菜单 214
    13.2.3 响应菜单项选择 217
    13.3 实现层级式导航 218
    13.4 可选菜单项 219
    13.4.1 切换菜单项标题 220
    13.4.2 “还有个问题” 222
    13.5 深入学习:工具栏与操作栏 224
    13.6 挑战练习:删除crime记录 224
    13.7 挑战练习:复数字符串资源 224
    13.8 挑战练习:用于RecyclerView的空视图 225

    第14章 SQLite数据库 226
    14.1 定义schema 226
    14.2 创建初始数据库 227
    14.2.1 使用Android Device Monitor查看文件 230
    14.2.2 处理数据库相关问题 231
    14.3 修改CrimeLab类 232
    14.4 写入数据库 233
    14.4.1 使用ContentValues 233
    14.4.2 插入和更新记录 234
    14.5 读取数据库 235
    14.5.1 使用CursorWrapper 236
    14.5.2 创建模型层对象 238
    14.6 深入学习:数据库高级主题介绍 241
    14.7 深入学习:应用上下文 241
    14.8 挑战练习:删除crime记录 242

    第15章 隐式intent 243
    15.1 添加按钮组件 244
    15.2 添加嫌疑人信息至模型层 244
    15.3 使用格式化字符串 246
    15.4 使用隐式intent 248
    15.4.1 隐式intent的组成 248
    15.4.2 发送消息 249
    15.4.3 获取联系人信息 252
    15.4.4 检查可响应任务的activity 254
    15.5 挑战练习:ShareCompat 256
    15.6 挑战练习:又一个隐式intent 256

    第16章 使用intent拍照 258
    16.1 布置照片 258
    16.2 文件存储 260
    16.2.1 使用FileProvider 261
    16.2.2 指定照片存放位置 262
    16.3 使用相机intent 263
    16.4 缩放和显示位图 265
    16.5 功能声明 268
    16.6 挑战练习:优化照片显示 269
    16.7 挑战练习:优化缩略图加载 269

    第17章 双版面主从用户界面 270
    17.1 增加布局灵活性 271
    17.1.1 修改SingleFragmentActivity 272
    17.1.2 创建包含两个fragment容器的布局 272
    17.1.3 使用别名资源 274
    17.1.4 创建平板设备专用可选资源 275
    17.2 activity:fragment的托管者 276
    17.3 深入学习:设备屏幕尺寸的确定 284
    17.4 挑战练习:添加滑动删除功能 285

    第18章 应用本地化 286
    18.1 资源本地化 286
    18.1.1 默认资源 289
    18.1.2 检查资源本地化完成情况 291
    18.1.3 区域修饰符 292
    18.2 配置修饰符 294
    18.2.1 可用资源优先级排定 295
    18.2.2 多重配置修饰符 296
    18.2.3 寻找最匹配的资源 297
    18.3 测试备选资源 298
    18.4 挑战练习:日期本地化 298

    第19章 Android辅助功能 299
    19.1 TalkBack 299
    19.1.1 点击浏览 301
    19.1.2 线性浏览 301
    19.2 实现非文字型元素可读 303
    19.2.1 添加内容描述 303
    19.2.2 实现组件可聚焦 305
    19.3 提升辅助体验 305
    19.4 深入学习:使用辅助功能扫描器 309
    19.5 挑战练习:优化列表项 311
    19.6 挑战练习:补全上下文信息 311
    19.7 挑战练习:事件主动通知 311

    第20章 数据绑定与MVVM 313
    20.1 为何要用MVVM 架构 314
    20.2 创建BeatBox应用 314
    20.3 导入assets 319
    20.4 处理assets 321
    20.5 使用assets 323
    20.6 绑定数据 325
    20.6.1 创建视图模型 327
    20.6.2 绑定至视图模型 328
    20.6.3 绑定数据观察 330
    20.7 访问assets 332
    20.8 深入学习:数据绑定再探 333
    20.8.1 lambda表达式 333
    20.8.2 更多语法糖 333
    20.8.3 BindingAdapter 333
    20.9 深入学习:为何使用assets 334
    20.10 深入学习:什么是non-assets 334

    第21章 音频播放与单元测试 335
    21.1 创建SoundPool 335
    21.2 加载音频文件 336
    21.3 播放音频 337
    21.4 添加测试依赖 338
    21.5 创建测试类 339
    21.6 实现测试类341
    21.7 编写测试方法 342
    21.8 数据绑定回调 346
    21.9 释放音频 346
    21.10 设备旋转和对象保存 347
    21.10.1 保留fragment 348
    21.10.2 设备旋转和已保留的fragment 349
    21.11 深入学习:是否保留fragment 351
    21.12 深入学习:Espresso与整合测试 351
    21.13 深入学习:虚拟对象与测试 352
    21.14 挑战练习:播放进度控制 353

    第22章 样式与主题 354
    22.1 颜色资源 354
    22.2 样式 355
    22.3 主题 357
    22.4 添加主题颜色 359
    22.5 覆盖主题属性 361
    22.6 修改按钮属性 364
    22.7 深入学习:样式继承拾遗 367
    22.8 深入学习:引用主题属性 367

    第23章 XML drawable 368
    23.1 统一按钮样式 368
    23.2 shape drawable 369
    23.3 state list drawable 371
    23.4 layer list drawable 372
    23.5 深入学习:为什么要用XML drawable 373
    23.6 深入学习:使用mipmap图像 374
    23.7 深入学习:使用9-patch图像 375
    23.8 挑战练习:按钮主题 379

    第24章 深入学习intent和任务 380
    24.1 创建NerdLauncher项目 380
    24.2 解析隐式intent 382
    24.3 在运行时创建显式intent 386
    24.4 任务与回退栈 388
    24.4.1 在任务间切换 389
    24.4.2 启动新任务 389
    24.5 使用NerdLauncher应用作为设备主屏幕 392
    24.6 挑战练习:应用图标 393
    24.7 深入学习:进程与任务 393
    24.8 深入学习:并发文档 395

    第25章 HTTP与后台任务 398
    25.1 创建PhotoGallery应用 399
    25.2 网络连接基本 401
    25.3 使用AsyncTask在后台线程上运行代码 403
    25.4 线程与主线程 405
    25.5 从Flickr获取JSON数据 407
    25.6 从AsyncTask回到主线程 413
    25.7 清理AsyncTask 416
    25.8 深入学习:AsyncTask再探 416
    25.9 深入学习:AsyncTask的替代方案 417
    25.10 挑战练习:Gson 418
    25.11 挑战练习:分页 418
    25.12 挑战练习:动态调整网格列 418

    第26章 Looper、Handler和HandlerThread 420
    26.1 配置RecyclerView以显示图片 420
    26.2 批量下载缩略图 422
    26.3 与主线程通信 423
    26.4 创建并启动后台线程 424
    26.5 Message 与message handler 426
    26.5.1 剖析Message 426
    26.5.2 剖析Handler 427
    26.5.3 使用handler 428
    26.5.4 传递handler 431
    26.6 深入学习:AsyncTask与线程 436
    26.7 深入学习:解决图片下载问题 436
    26.8 深入学习:StrictMode 437
    26.9 挑战练习:预加载以及缓存 438

    第27章 搜索 439
    27.1 搜索Flickr网站 439
    27.2 使用SearchView 443
    27.3 使用shared preferences实现轻量级数据存储 447
    27.4 优化应用 451
    27.5 挑战练习:深度优化PhotoGallery应用 451

    第28章 后台服务 452
    28.1 创建IntentService 452
    28.2 服务的作用 454
    28.3 查找最新返回结果 456
    28.4 使用AlarmManager延迟运行服务 458
    28.4.1 合理控制服务启动的频度 460
    28.4.2 PendingIntent 461
    28.4.3 使用PendingIntent管理定时器 461
    28.5 控制定时器 462
    28.6 通知信息 464
    28.7 挑战练习:可穿戴设备上的通知 466
    28.8 深入学习:服务之细节 467
    28.8.1 服务的能与不能 467
    28.8.2 服务的生命周期 467
    28.8.3 non-sticky服务 467
    28.8.4 sticky服务 468
    28.8.5 绑定服务 468
    28.9 深入学习:JobScheduler 和JobService 469
    28.10 挑战练习:在Lollipop设备上使用JobService 472
    28.11 深入学习:sync adapter 472

    第29章 broadcast intent 474
    29.1 普通intent和broadcast intent 474
    29.2 接收系统broadcast:重启后唤醒 475
    29.2.1 创建并登记standalone receiver 475
    29.2.2 使用receiver 477
    29.3 过滤前台通知消息 479
    29.3.1 发送broadcast intent 479
    29.3.2 创建并登记动态receiver 480
    29.3.3 使用私有权限限制broadcast 482
    29.3.4 使用有序broadcast收发数据 484
    29.4 receiver与长时运行任务 488
    29.5 深入学习:本地事件 488
    29.5.1 使用EventBus 489
    29.5.2 使用RxJava 490
    29.6 深入学习:探测fragment的状态 490

    第30章 网页浏览 492
    30.1 最后一段Flickr数据 492
    30.2 简单方式:隐式intent 494
    30.3 较难方式:使用WebView 496
    30.4 处理WebView的设备旋转问题 502
    30.5 深入学习:注入JavaScript对象 502
    30.6 深入学习:WebView升级 503
    30.7 挑战练习:使用后退键浏览历史网页 504
    30.8 挑战练习:非HTTP链接支持 504

    第31章 定制视图与触摸事件 505
    31.1 创建DragAndDraw项目 505
    31.2 创建定制视图 507
    31.3 处理触摸事件 509
    31.4 onDraw(...)方法内的图形绘制 513
    31.5 挑战练习:设备旋转问题 515
    31.6 挑战练习:旋转矩形框 515

    第32章 属性动画 516
    32.1 建立场景 516
    32.2 简单属性动画 519
    32.2.1 视图属性转换 521
    32.2.2 使用不同的interpolator 523
    32.2.3 色彩渐变 523
    32.3 播放多个动画 525
    32.4 深入学习:其他动画API 527
    32.4.1 传统动画工具 527
    32.4.2 转场 527
    32.5 挑战练习 527

    第33章 地理位置和Play服务 528
    33.1 地理位置和定位类库 528
    33.2 创建Locatr项目 529
    33.3 Play服务定位和模拟器 530
    33.4 创建Locatr应用 532
    33.5 配置Google Play服务 534
    33.6 使用Google Play服务 536
    33.7 基于地理位置的Flickr搜索 538
    33.8 获取定位数据 539
    33.9 获取运行时权限 542
    33.10 寻找并显示图片 546
    33.11 挑战练习:权限使用理由 548
    33.12 挑战练习:进度指示器 549

    第34章 使用地图 550
    34.1 导入Play地图服务库 550
    34.2 Android上的地图服务 550
    34.3 获取Maps API key 550
    34.4 创建地图 552
    34.5 获取更多地理位置数据 553
    34.6 使用地图 556
    34.7 深入学习:团队开发和API key 560

    第35章 material design 562
    35.1 material surface 562
    35.1.1 elevation和Z值 564
    35.1.2 state list animator 565
    35.2 动画工具 566
    35.2.1 circular reveal 567
    35.2.2 shared element transition 568
    35.3 新的视图组件 571
    35.3.1 card 571
    35.3.2 floating action button 572
    35.3.3 snackbar 573
    35.4 深入学习material design 574

    第36章 编后语 575
    36.1 终极挑战 575
    36.2 关于我们 575
    36.3 致谢 576
查看详情
系列丛书 / 更多
Android编程权威指南(第3版)
机器学习实战
[美]Peter Harrington 著;李锐、李鹏、曲亚东 译
Android编程权威指南(第3版)
图灵程序设计丛书:Python基础教程
[挪威]Magnus Lie Hetland 著;司维、曾军崴、谭颖华 译
Android编程权威指南(第3版)
JavaScript高级程序设计(第3版)
[美]Nicholas C.Zakas 著;李松峰、曹力 译
Android编程权威指南(第3版)
Python编程:从入门到实践
[美]埃里克·马瑟斯(Eric Matthes) 著;袁国忠 译
Android编程权威指南(第3版)
R语言实战(第2版)
[美]卡巴科弗(Robert I. Kabacoff) 著;王小宁、刘撷芯、黄俊文 译
Android编程权威指南(第3版)
大数据:互联网大规模数据挖掘与分布式处理
[美]Anand、[美]Jeffrey David Ullman 著;王斌 译
Android编程权威指南(第3版)
算法(第4版)
[美]Robert、[美]Kevin Wayne 著;谢路云 译
Android编程权威指南(第3版)
Spark快速大数据分析
[美]卡劳(Holden Karau)、[美]肯维尼斯科(Andy Konwinski)、[美]温德尔(Patrick Wendell)、[加拿大]扎哈里亚(Matei Zaharia) 著;王道远 译
Android编程权威指南(第3版)
MySQL必知必会
[英]福塔(Ben Forta) 著;刘晓霞、钟鸣 译
Android编程权威指南(第3版)
图解HTTP
[日]上野·宣 著;于均良 译
Android编程权威指南(第3版)
Objective-C基础教程 第2版
[美]Scott、[美]Waqar、[美]Mark Dalrymple 著;周庆成 译
Android编程权威指南(第3版)
算法图解
袁国忠 译
您可能感兴趣 / 更多
Android编程权威指南(第3版)
画像砖
王明发 著
Android编程权威指南(第3版)
绿壳蛋鸡饲养新技术
王明发 著