《Android編程權威指南》是2014年人民郵電出版社出版的圖書,作者是美國的Bill Phillips、Brian Hardy。
基本介紹
- 書名:Android編程權威指南
- 又名:Android programming: the big nerd ranch guide
- 作者: [美] Bill Phillips / [美] Brian Hardy
- 出版時間:2014-4
書籍信息,內容簡介,作者簡介,目錄,
書籍信息
作者: [美] Bill Phillips / [美] Brian Hardy
出版社: 人民郵電出版社
原作名: Android programming: the big nerd ranch guide
譯者: 王明發
出版年: 2014-4
頁數: 544
定價: 99.00
裝幀: 平裝
ISBN: 9787115346438
內容簡介
權威、全面、實用、易懂,是本書最大的特色。本書根據美國大名鼎鼎的Big Nerd Ranch訓練營的Android培訓講義編寫而成,已經為微軟、谷歌、Facebook等行業巨頭培養了眾多專業人才。作者巧妙地把Android開發所需的龐雜知識、行業實踐、編程規範等融入一本書中,通過精心編排的套用示例、循序漸進的內容組織,以及循循善誘的語言,深入地講解了Android開發的方方面面。如果學完一章之後仍然意猶未盡,那“挑戰練習”一定會讓你大呼過癮。本書之所以能在移動套用開發類圖書中脫穎而出,還在於它真的是在與讀者“對話”。閱讀本書就好像有一位私人導師在你身邊隨時為你答疑解惑。
本書適合所有對Android及移動開發感興趣的讀者,需要一定的Java編程基礎。
作者簡介
作者簡介:
Bill Phillips
Big Nerd Ranch資深Android講師、高級軟體工程師。他與Brian Hardy合作,為Big Nerd Ranch開發了廣受好評的5天Android訓練營培訓課程。Bill擅長透徹地理解事物的本質,並幫助其他人做到這一點。閒暇時間,Bill喜歡閱讀和彈鋼琴。
Brian Hardy
Big Nerd Ranch首席軟體工程師、資深講師。Big Nerd Ranch的Android、iOS和Ruby培訓課程均由Brian設計開發。閒暇時間,Brian喜歡騎腳踏車和聽音樂。
目錄
第1章 Android套用初體驗 1
1.1 套用基礎 2
1.2 創建Android項目 2
1.3 Eclipse工作區導航 5
1.4 用戶界面設計 6
1.4.1 視圖層級結構 9
1.4.2 組件屬性 10
1.4.3 創建字元串資源 11
1.4.4 預覽界面布局 12
1.5 從布局XML到視圖對象 13
1.6 組件的實際套用 15
1.6.1 類包組織導入 16
1.6.2 引用組件 16
1.6.3 設定監聽器 17
1.7 使用模擬器運行套用 21
1.8 Android編譯過程 22
第2章 Android與MVC設計模式 26
2.1 創建新類 26
2.2 Android與MVC設計模式 30
2.3 更新視圖層 31
2.4 更新控制層 33
2.5 在設備上運行套用 37
2.5.1 連線設備 37
2.5.2 配置設備用於套用開發 38
2.6 添加圖示資源 38
2.6.1 向項目中添加資源 39
2.6.2 在XML檔案中引用資源 40
2.7 關於挑戰練習 41
2.8 挑戰練習一:為TextView添加監聽器 41
2.9 挑戰練習二:添加後退按鈕 42
2.10 挑戰練習三:從按鈕到圖示按鈕 42
第3章 Activity的生命周期 45
3.1 日誌跟蹤理解Activity生命周期 46
3.1.1 輸出日誌信息 46
3.1.2 使用 LogCat 48
3.2 設備旋轉與Activity生命周期 52
3.3 設備旋轉前保存數據 56
3.4 再探Activity生命周期 57
3.5 深入學習:測試onSaveInstanceState-(Bundle)方法 59
3.6 深入學習:日誌記錄的級別與方法 60
第4章 Android套用的調試 62
4.1 DDMS套用調試透視圖 63
4.2 異常與棧跟蹤 64
4.2.1 診斷套用異常 65
4.2.2 記錄棧跟蹤日誌 66
4.2.3 設定斷點 68
4.2.4 使用異常斷點 71
4.3 檔案瀏覽器 72
4.4 Android特有的調試工具 73
4.4.1 使用Android Lint 73
4.4.2 R類的問題 74
第5章 第二個activity 75
5.1 創建第二個activity 76
5.1.1 創建新布局 77
5.1.2 創建新的activity子類 80
5.1.3 在manifest配置檔案中聲明activity 81
5.1.4 為QuizActivity添加cheat按鈕 82
5.2 啟動activity 83
5.3 activity間的數據傳遞 85
5.3.1 使用intent extra 86
5.3.2 從子activity獲取返回結果 88
5.4 activity的使用與管理 92
5.5 挑戰練習 95
第6章 Android SDK版本與兼容 96
6.1 Android SDK版本 96
6.2 Android編程與兼容性問題 97
6.2.1 全新的系統版本——Honeycomb 97
6.2.2 SDK最低版本 99
6.2.3 SDK目標版本 99
6.2.4 SDK編譯版本 99
6.2.5 安全添加新版本API中的代碼 100
6.3 使用Android開發者文檔 103
6.4 挑戰練習:報告編譯版本 105
第7章 UI fragment與fragment 管理器 106
7.1 UI設計的靈活性需求 107
7.2 fragment的引入 107
7.3 著手開發CriminalIntent 108
7.3.1 創建新項目 110
7.3.2 fragment與支持庫 112
7.3.3 創建Crime類 113
7.4 託管UI fragment 115
7.4.1 fragment的生命周期 115
7.4.2 託管的兩種方式 116
7.4.3 定義容器視圖 116
7.5 創建UI fragment 117
7.5.1 定義CrimeFragment的布局 118
7.5.2 創建CrimeFragment類 119
7.6 添加UI fragment到FragmentManager 122
7.6.1 fragment事務 123
7.6.2 FragmentManager與fragment生命周期 125
7.7 activity使用fragment的理由 127
7.8 深入學習:Honeycomb、ICS、Jelly Bean以及更高版本系統上的套用開發 127
第8章 使用布局與組件創建用戶界面 128
8.1 升級Crime類 128
8.2 更新布局 129
8.3 生成並使用組件 131
8.4 深入探討XML布局屬性 132
8.4.1 樣式、主題及主題屬性 132
8.4.2 dp、sp以及螢幕像素密度 133
8.4.3 Android開發設計原則 134
8.4.4 布局參數 135
8.4.5 邊距與內邊距 135
8.5 使用圖形布局工具 136
8.5.1 添加新組件 138
8.5.2 屬性視圖中編輯組件屬性 138
8.5.3 在框架視圖中重新組織組件 139
8.5.4 更新子組件的布局參數 140
8.5.5 android:layout_weight屬性的工作原理 141
8.5.6 圖形布局工具使用總結 142
8.5.7 組件ID與多種布局 142
8.6 挑戰練習:日期格式化 143
第9章 使用ListFragment顯示列表 144
9.1 更新CriminalIntent套用的模型層 145
9.2 創建ListFragment 147
9.3 使用抽象activity託管fragment 149
9.3.1 通用的fragment託管布局 149
9.3.2 抽象activity類 150
9.4 ListFragment、ListView及ArrayAdapter 154
9.4.1 創建ArrayAdapter<T>類實例 157
9.4.2 回響列表項的點擊事件 159
9.5 定製列表項 160
9.5.1 創建列表項布局 160
9.5.2 創建adapter子類 162
第10章 使用fragment argument 165
10.1 從fragment中啟動activity 165
10.1.1 附加extra信息 166
10.1.2 獲取extra信息 167
10.1.3 使用Crime數據更新CrimeFragment視圖 167
10.1.4 直接獲取extra信息方式的缺點 169
10.2 fragment argument 169
10.2.1 附加argument給fragment 169
10.2.2 獲取argument 170
10.3 重新載入顯示列表項 171
10.4 通過fragment獲取返回結果 172
第11章 使用ViewPager 174
11.1 創建CrimePagerActivity 175
11.1.1 以代碼的方式定義並產生布局 176
11.1.2 ViewPager與Pager-Adapter 177
11.1.3 整合配置並使用CrimePagerActivity 178
11.1.4 FragmentStatePager-Adapter與Fragment-PagerAdapter 180
11.2 深入學習:ViewPager的工作原理 182
第12章 對話框 184
12.1 創建DialogFragment 186
12.1.1 顯示DialogFragment 187
12.1.2 設定對話框的顯示內容 188
12.2 fragment間的數據傳遞 190
12.2.1 傳遞數據給DatePicker-Fragment 191
12.2.2 返回數據給CrimeFragment 193
12.3 挑戰練習:更多對話框 198
第13章 使用MediaPlayer播放音頻 199
13.1 添加資源 200
13.2 定義HelloMoonFragment布局檔案 202
13.3 創建HelloMoonFragment 203
13.4 使用布局fragment 204
13.5 音頻播放 205
13.6 挑戰練習:暫停音頻播放 208
13.7 深入學習:播放視頻 208
13.8 挑戰練習:在HelloMoon套用中播放視頻 208
第14章 fragment的保留 209
14.1 保留fragment實例 209
14.2 設備旋轉與保留的fragment 210
14.3 保留的fragment:一切都完美了嗎 212
14.4 設備旋轉處理與onSaveInstance-State(Bundle)方法 212
14.5 深入學習:fragment引入前的設備旋轉問題 214
第15章 套用本地化 215
15.1 本地化資源 215
15.2 配置修飾符 216
15.2.1 可用資源優先權排定 217
15.2.2 多重配置修飾符 218
15.2.3 尋找最匹配的資源 219
15.3 更多資源使用原則及控制 220
15.3.1 資源命名 220
15.3.2 資源目錄結構 220
15.4 測試備選資源 221
第16章 操作欄 223
16.1 選項選單 223
16.1.1 在XML檔案中定義選項選單 225
16.1.2 創建選項選單 227
16.1.3 回響選單項選擇 230
16.2 實現層級式導航 232
16.2.1 啟用套用圖示的導航功能 232
16.2.2 回響向上按鈕 233
16.3 可選選單項 236
16.3.1 創建可選選單XML檔案 236
16.3.2 切換選單項標題 237
16.3.3 “還有個問題” 238
16.4 挑戰練習:用於列表的空視圖 239
第17章 存儲與載入本地檔案 241
17.1 CriminalIntent套用的數據存取 241
17.1.1 保存crime數據到JSON檔案 242
17.1.2 從檔案中讀取crime數據 246
17.2 挑戰練習:使用外部存儲 248
17.3 深入學習:Android檔案系統與Java I/O 248
第18章 上下文選單與上下文操作模式 250
18.1 定義上下文選單資源 251
18.2 實施浮動上下文選單 251
18.2.1 創建上下文選單 251
18.2.2 為上下文選單登記視圖 252
18.2.3 回響選單項選擇 253
18.3 實施上下文操作模式 254
18.3.1 實現列表視圖的多選操作 255
18.3.2 列表視圖中的操作模式回調方法 256
18.3.3 改變已激活視圖的顯示背景 258
18.3.4 實現其他視圖的上下文操作模式 259
18.4 兼容性問題:回退還是複製 260
18.5 挑戰練習:在CrimeFragment視圖中刪除crime記錄 261
18.6 深入學習:ActionBarSherlock 261
18.7 挑戰練習:使用ActionBarSherlock 263
18.7.1 CriminalIntent套用中ABS的基本整合 264
18.7.2 ABS的深度整合 264
18.7.3 ABS的完全整合 265
第19章 相機I:取景器 266
19.1 創建Fragment布局 267
19.2 創建CrimeCameraFragment 269
19.3 創建CrimeCameraActivity 269
19.4 使用相機API 271
19.4.1 打開並釋放相機 271
19.4.2 SurfaceView、Surface-Holder與Surface 272
19.4.3 確定預覽界面大小 276
19.4.4 啟動CrimeCamera-Activity 277
19.5 深入學習:以命令行的方式運行activity 281
第20章 相機 II:拍攝並處理照片 283
20.1 拍攝照片 283
20.1.1 實現相機回調方法 285
20.1.2 設定圖片尺寸大小 288
20.2 返回數據給CrimeFragment 288
20.2.1 以接收返回值的方式啟動CrimeCameraActivity 289
20.2.2 在CrimeCameraFragment中設定返回值 290
20.2.3 在CrimeFragment中獲取照片檔案名稱 290
20.3 更新模型層 291
20.3.1 新增Photo類 292
20.3.2 為Crime添加photo屬性 293
20.3.3 設定photo屬性 293
20.4 更新CrimeFragment的視圖 294
20.4.1 添加ImageView組件 295
20.4.2 圖像處理 296
20.5 在DialogFragment中顯示大圖片 300
20.6 挑戰練習:Crime照片的顯示方向 303
20.7 挑戰練習:刪除照片 303
20.8 深入學習:Android代碼的廢棄處理 303
第21章 隱式intent 305
21.1 添加按鈕組件 306
21.2 添加嫌疑人信息至模型層 307
21.3 使用格式化字元串 308
21.4 使用隱式intent 309
21.4.1 典型隱式intent的組成 310
21.4.2 傳送陋習報告 311
21.4.3 獲取聯繫人信息 313
21.4.4 檢查可以回響的activity 316
21.5 挑戰練習:又一個隱式intent 317
第22章 Master-Detail用戶界面 318
22.1 增加布局靈活性 319
22.1.1 修改SingleFragment-Activity 320
22.1.2 創建包含兩個fragment容器的布局 320
22.1.3 使用別名資源 322
22.2 Activity:fragment的託管者 323
22.3 深入學習:設備螢幕尺寸的確定 331
第23章 深入學習intent和任務 333
23.1 創建NerdLauncher項目 333
23.2 解析隱式intent 334
23.3 在運行時創建顯式intent 337
23.4 任務與後退棧 338
23.5 使用NerdLauncher套用作為設備主螢幕 341
23.6 挑戰練習:套用圖示與任務重排 341
23.7 進程與任務 341
第24章 樣式與include標籤的使用 343
24.1 創建RemoteControl項目 344
24.1.1 編碼實現RemoteControl-Activity 344
24.1.2 創建RemoteControl-Fragment 345
24.2 使用樣式消除重複代碼 348
24.3 完善布局定義 350
24.4 深入學習:使用include與merge標籤 353
24.5 挑戰練習:樣式的繼承 354
第25章 XML Drawable與9-Patches 355
25.1 XML drawable 356
25.2 state list drawable 358
25.3 layer list與inset drawable 360
25.4 使用9-patch圖像 362
第26章 HTTP與後台任務 368
26.1 創建PhotoGallery套用 369
26.2 網路連線基本 372
26.3 使用AsyncTask在後台執行緒上運行代碼 373
26.4 執行緒與主執行緒 375
26.5 獲取Flickr XML數據 377
26.6 從AsyncTask回到主執行緒 382
26.7 深入學習:再探AsyncTask 385
26.8 挑戰練習:分頁 386
第27章 Looper、Handler與HandlerThread 387
27.1 設定GridView以顯示圖片 387
27.2 批量下載縮略圖 390
27.3 與主執行緒通信 390
27.4 創建並啟動後台執行緒 391
27.5 Message與message Handler 393
27.5.1 訊息的剖析 393
27.5.2 Handler的剖析 393
27.5.3 使用handler 395
27.5.4 傳遞handler 397
27.6 深入學習:AsyncTask與Thread 401
27.7 挑戰練習:預載入以及快取 401
第28章 搜尋 402
28.1 搜尋Flickr網站 402
28.2 搜尋對話框 404
28.2.1 創建搜尋界面 404
28.2.2 可搜尋的activity 406
28.2.3 物理搜尋鍵 408
28.2.4 搜尋的工作原理 409
28.2.5 啟動模式與新的intent 410
28.2.6 使用shared preferences實現輕量級數據存儲 412
28.3 在Android 3.0以後版本的設備上使用SearchView 414
28.4 挑戰練習 416
第29章 後台服務 417
29.1 創建IntentService 417
29.2 服務的作用 419
29.3 查找最新返回結果 421
29.4 使用AlarmManager延遲運行服務 422
29.4.1 PendingIntent 424
29.4.2 使用PendingIntent管理定時器 424
29.5 控制定時器 425
29.6 通知信息 428
29.7 深入學習:服務細節內容 429
29.7.1 服務的能與不能 430
29.7.2 服務的生命周期 430
29.7.3 non-sticky服務 430
29.7.4 sticky服務 431
29.7.5 綁定服務 431
第30章 broadcast Intent 433
30.1 隨設備重啟而重啟的定時器 433
30.1.1 配置檔案中的broadcast receiver 434
30.1.2 如何使用receiver 435
30.2 過濾前台通知訊息 436
30.2.1 傳送broadcast intent 437
30.2.2 動態broadcast receiver 437
30.2.3 使用私有許可權 440
30.2.4 使用ordered broadcast接收結果 442
30.3 receiver與長時運行任務 446
第31章 網頁瀏覽 447
31.1 最後一段Flickr數據 447
31.2 簡單方式:使用隱式intent 448
31.3 較難方式:使用WebView 449
31.3.1 使用WebChromeClient最佳化WebView的顯示 453
31.3.2 處理WebView的設備旋轉問題 455
31.4 深入學習:注入JavaScript對象 456
第32章 定製視圖與觸摸事件 457
32.1 創建DragAndDraw項目 457
32.1.1 創建DragAndDraw-Activity 458
32.1.2 創建DragAndDraw-Fragment 459
32.2 創建定製視圖 460
32.3 處理觸摸事件 462
32.4 onDraw(...)方法內的圖形繪製 465
32.5 挑戰練習:設備旋轉問題 467
第33章 跟蹤設備的地理位置 468
33.1 啟動RunTracker項目 468
33.1.1 創建RunActivity 469
33.1.2 創建RunFragment 470
33.2 地理位置與LocationManager 472
33.3 接收定位數據更新broadcast 474
33.4 使用定位數據刷新UI顯示 475
33.5 快速定位:最近一次地理位置 479
33.6 在物理和虛擬設備上測試地理位置定位 480
第34章 使用SQLite本地資料庫 482
34.1 在資料庫中存儲旅程和地理位置信息 482
34.2 查詢資料庫中的旅程列表 488
34.3 使用CursorAdapter顯示旅程列表 490
34.4 創建新旅程 493
34.5 管理現有旅程 494
34.6 挑戰練習:識別當前跟蹤的旅程 500
第35章 使用Loader載入異步數據 501
35.1 Loader與LoaderManager 501
35.2 在RunTracker套用中使用Loader 502
35.3 載入旅程列表 503
35.4 載入單個旅程 506
35.5 載入旅程的最近一次地理位置 509
第36章 使用地圖 511
36.1 添加Maps API給RunTracker套用 511
36.1.1 使用物理設備測試地圖 511
36.1.2 安裝使用Google Play services SDK 511
36.1.3 獲取Google Maps API key 512
36.1.4 更新RunTracker套用的manifest配置檔案 512
36.2 在地圖上顯示用戶的地理位置 513
36.3 顯示旅程路線 516
36.4 為旅程添加開始和結束地圖示注 520
36.5 挑戰練習:實時數據更新 521
第37章 編後語 522
37.1 終極挑戰 522
37.2 關於我們 523
37.3 致謝 523
1.1 套用基礎 2
1.2 創建Android項目 2
1.3 Eclipse工作區導航 5
1.4 用戶界面設計 6
1.4.1 視圖層級結構 9
1.4.2 組件屬性 10
1.4.3 創建字元串資源 11
1.4.4 預覽界面布局 12
1.5 從布局XML到視圖對象 13
1.6 組件的實際套用 15
1.6.1 類包組織導入 16
1.6.2 引用組件 16
1.6.3 設定監聽器 17
1.7 使用模擬器運行套用 21
1.8 Android編譯過程 22
第2章 Android與MVC設計模式 26
2.1 創建新類 26
2.2 Android與MVC設計模式 30
2.3 更新視圖層 31
2.4 更新控制層 33
2.5 在設備上運行套用 37
2.5.1 連線設備 37
2.5.2 配置設備用於套用開發 38
2.6 添加圖示資源 38
2.6.1 向項目中添加資源 39
2.6.2 在XML檔案中引用資源 40
2.7 關於挑戰練習 41
2.8 挑戰練習一:為TextView添加監聽器 41
2.9 挑戰練習二:添加後退按鈕 42
2.10 挑戰練習三:從按鈕到圖示按鈕 42
第3章 Activity的生命周期 45
3.1 日誌跟蹤理解Activity生命周期 46
3.1.1 輸出日誌信息 46
3.1.2 使用 LogCat 48
3.2 設備旋轉與Activity生命周期 52
3.3 設備旋轉前保存數據 56
3.4 再探Activity生命周期 57
3.5 深入學習:測試onSaveInstanceState-(Bundle)方法 59
3.6 深入學習:日誌記錄的級別與方法 60
第4章 Android套用的調試 62
4.1 DDMS套用調試透視圖 63
4.2 異常與棧跟蹤 64
4.2.1 診斷套用異常 65
4.2.2 記錄棧跟蹤日誌 66
4.2.3 設定斷點 68
4.2.4 使用異常斷點 71
4.3 檔案瀏覽器 72
4.4 Android特有的調試工具 73
4.4.1 使用Android Lint 73
4.4.2 R類的問題 74
第5章 第二個activity 75
5.1 創建第二個activity 76
5.1.1 創建新布局 77
5.1.2 創建新的activity子類 80
5.1.3 在manifest配置檔案中聲明activity 81
5.1.4 為QuizActivity添加cheat按鈕 82
5.2 啟動activity 83
5.3 activity間的數據傳遞 85
5.3.1 使用intent extra 86
5.3.2 從子activity獲取返回結果 88
5.4 activity的使用與管理 92
5.5 挑戰練習 95
第6章 Android SDK版本與兼容 96
6.1 Android SDK版本 96
6.2 Android編程與兼容性問題 97
6.2.1 全新的系統版本——Honeycomb 97
6.2.2 SDK最低版本 99
6.2.3 SDK目標版本 99
6.2.4 SDK編譯版本 99
6.2.5 安全添加新版本API中的代碼 100
6.3 使用Android開發者文檔 103
6.4 挑戰練習:報告編譯版本 105
第7章 UI fragment與fragment 管理器 106
7.1 UI設計的靈活性需求 107
7.2 fragment的引入 107
7.3 著手開發CriminalIntent 108
7.3.1 創建新項目 110
7.3.2 fragment與支持庫 112
7.3.3 創建Crime類 113
7.4 託管UI fragment 115
7.4.1 fragment的生命周期 115
7.4.2 託管的兩種方式 116
7.4.3 定義容器視圖 116
7.5 創建UI fragment 117
7.5.1 定義CrimeFragment的布局 118
7.5.2 創建CrimeFragment類 119
7.6 添加UI fragment到FragmentManager 122
7.6.1 fragment事務 123
7.6.2 FragmentManager與fragment生命周期 125
7.7 activity使用fragment的理由 127
7.8 深入學習:Honeycomb、ICS、Jelly Bean以及更高版本系統上的套用開發 127
第8章 使用布局與組件創建用戶界面 128
8.1 升級Crime類 128
8.2 更新布局 129
8.3 生成並使用組件 131
8.4 深入探討XML布局屬性 132
8.4.1 樣式、主題及主題屬性 132
8.4.2 dp、sp以及螢幕像素密度 133
8.4.3 Android開發設計原則 134
8.4.4 布局參數 135
8.4.5 邊距與內邊距 135
8.5 使用圖形布局工具 136
8.5.1 添加新組件 138
8.5.2 屬性視圖中編輯組件屬性 138
8.5.3 在框架視圖中重新組織組件 139
8.5.4 更新子組件的布局參數 140
8.5.5 android:layout_weight屬性的工作原理 141
8.5.6 圖形布局工具使用總結 142
8.5.7 組件ID與多種布局 142
8.6 挑戰練習:日期格式化 143
第9章 使用ListFragment顯示列表 144
9.1 更新CriminalIntent套用的模型層 145
9.2 創建ListFragment 147
9.3 使用抽象activity託管fragment 149
9.3.1 通用的fragment託管布局 149
9.3.2 抽象activity類 150
9.4 ListFragment、ListView及ArrayAdapter 154
9.4.1 創建ArrayAdapter<T>類實例 157
9.4.2 回響列表項的點擊事件 159
9.5 定製列表項 160
9.5.1 創建列表項布局 160
9.5.2 創建adapter子類 162
第10章 使用fragment argument 165
10.1 從fragment中啟動activity 165
10.1.1 附加extra信息 166
10.1.2 獲取extra信息 167
10.1.3 使用Crime數據更新CrimeFragment視圖 167
10.1.4 直接獲取extra信息方式的缺點 169
10.2 fragment argument 169
10.2.1 附加argument給fragment 169
10.2.2 獲取argument 170
10.3 重新載入顯示列表項 171
10.4 通過fragment獲取返回結果 172
第11章 使用ViewPager 174
11.1 創建CrimePagerActivity 175
11.1.1 以代碼的方式定義並產生布局 176
11.1.2 ViewPager與Pager-Adapter 177
11.1.3 整合配置並使用CrimePagerActivity 178
11.1.4 FragmentStatePager-Adapter與Fragment-PagerAdapter 180
11.2 深入學習:ViewPager的工作原理 182
第12章 對話框 184
12.1 創建DialogFragment 186
12.1.1 顯示DialogFragment 187
12.1.2 設定對話框的顯示內容 188
12.2 fragment間的數據傳遞 190
12.2.1 傳遞數據給DatePicker-Fragment 191
12.2.2 返回數據給CrimeFragment 193
12.3 挑戰練習:更多對話框 198
第13章 使用MediaPlayer播放音頻 199
13.1 添加資源 200
13.2 定義HelloMoonFragment布局檔案 202
13.3 創建HelloMoonFragment 203
13.4 使用布局fragment 204
13.5 音頻播放 205
13.6 挑戰練習:暫停音頻播放 208
13.7 深入學習:播放視頻 208
13.8 挑戰練習:在HelloMoon套用中播放視頻 208
第14章 fragment的保留 209
14.1 保留fragment實例 209
14.2 設備旋轉與保留的fragment 210
14.3 保留的fragment:一切都完美了嗎 212
14.4 設備旋轉處理與onSaveInstance-State(Bundle)方法 212
14.5 深入學習:fragment引入前的設備旋轉問題 214
第15章 套用本地化 215
15.1 本地化資源 215
15.2 配置修飾符 216
15.2.1 可用資源優先權排定 217
15.2.2 多重配置修飾符 218
15.2.3 尋找最匹配的資源 219
15.3 更多資源使用原則及控制 220
15.3.1 資源命名 220
15.3.2 資源目錄結構 220
15.4 測試備選資源 221
第16章 操作欄 223
16.1 選項選單 223
16.1.1 在XML檔案中定義選項選單 225
16.1.2 創建選項選單 227
16.1.3 回響選單項選擇 230
16.2 實現層級式導航 232
16.2.1 啟用套用圖示的導航功能 232
16.2.2 回響向上按鈕 233
16.3 可選選單項 236
16.3.1 創建可選選單XML檔案 236
16.3.2 切換選單項標題 237
16.3.3 “還有個問題” 238
16.4 挑戰練習:用於列表的空視圖 239
第17章 存儲與載入本地檔案 241
17.1 CriminalIntent套用的數據存取 241
17.1.1 保存crime數據到JSON檔案 242
17.1.2 從檔案中讀取crime數據 246
17.2 挑戰練習:使用外部存儲 248
17.3 深入學習:Android檔案系統與Java I/O 248
第18章 上下文選單與上下文操作模式 250
18.1 定義上下文選單資源 251
18.2 實施浮動上下文選單 251
18.2.1 創建上下文選單 251
18.2.2 為上下文選單登記視圖 252
18.2.3 回響選單項選擇 253
18.3 實施上下文操作模式 254
18.3.1 實現列表視圖的多選操作 255
18.3.2 列表視圖中的操作模式回調方法 256
18.3.3 改變已激活視圖的顯示背景 258
18.3.4 實現其他視圖的上下文操作模式 259
18.4 兼容性問題:回退還是複製 260
18.5 挑戰練習:在CrimeFragment視圖中刪除crime記錄 261
18.6 深入學習:ActionBarSherlock 261
18.7 挑戰練習:使用ActionBarSherlock 263
18.7.1 CriminalIntent套用中ABS的基本整合 264
18.7.2 ABS的深度整合 264
18.7.3 ABS的完全整合 265
第19章 相機I:取景器 266
19.1 創建Fragment布局 267
19.2 創建CrimeCameraFragment 269
19.3 創建CrimeCameraActivity 269
19.4 使用相機API 271
19.4.1 打開並釋放相機 271
19.4.2 SurfaceView、Surface-Holder與Surface 272
19.4.3 確定預覽界面大小 276
19.4.4 啟動CrimeCamera-Activity 277
19.5 深入學習:以命令行的方式運行activity 281
第20章 相機 II:拍攝並處理照片 283
20.1 拍攝照片 283
20.1.1 實現相機回調方法 285
20.1.2 設定圖片尺寸大小 288
20.2 返回數據給CrimeFragment 288
20.2.1 以接收返回值的方式啟動CrimeCameraActivity 289
20.2.2 在CrimeCameraFragment中設定返回值 290
20.2.3 在CrimeFragment中獲取照片檔案名稱 290
20.3 更新模型層 291
20.3.1 新增Photo類 292
20.3.2 為Crime添加photo屬性 293
20.3.3 設定photo屬性 293
20.4 更新CrimeFragment的視圖 294
20.4.1 添加ImageView組件 295
20.4.2 圖像處理 296
20.5 在DialogFragment中顯示大圖片 300
20.6 挑戰練習:Crime照片的顯示方向 303
20.7 挑戰練習:刪除照片 303
20.8 深入學習:Android代碼的廢棄處理 303
第21章 隱式intent 305
21.1 添加按鈕組件 306
21.2 添加嫌疑人信息至模型層 307
21.3 使用格式化字元串 308
21.4 使用隱式intent 309
21.4.1 典型隱式intent的組成 310
21.4.2 傳送陋習報告 311
21.4.3 獲取聯繫人信息 313
21.4.4 檢查可以回響的activity 316
21.5 挑戰練習:又一個隱式intent 317
第22章 Master-Detail用戶界面 318
22.1 增加布局靈活性 319
22.1.1 修改SingleFragment-Activity 320
22.1.2 創建包含兩個fragment容器的布局 320
22.1.3 使用別名資源 322
22.2 Activity:fragment的託管者 323
22.3 深入學習:設備螢幕尺寸的確定 331
第23章 深入學習intent和任務 333
23.1 創建NerdLauncher項目 333
23.2 解析隱式intent 334
23.3 在運行時創建顯式intent 337
23.4 任務與後退棧 338
23.5 使用NerdLauncher套用作為設備主螢幕 341
23.6 挑戰練習:套用圖示與任務重排 341
23.7 進程與任務 341
第24章 樣式與include標籤的使用 343
24.1 創建RemoteControl項目 344
24.1.1 編碼實現RemoteControl-Activity 344
24.1.2 創建RemoteControl-Fragment 345
24.2 使用樣式消除重複代碼 348
24.3 完善布局定義 350
24.4 深入學習:使用include與merge標籤 353
24.5 挑戰練習:樣式的繼承 354
第25章 XML Drawable與9-Patches 355
25.1 XML drawable 356
25.2 state list drawable 358
25.3 layer list與inset drawable 360
25.4 使用9-patch圖像 362
第26章 HTTP與後台任務 368
26.1 創建PhotoGallery套用 369
26.2 網路連線基本 372
26.3 使用AsyncTask在後台執行緒上運行代碼 373
26.4 執行緒與主執行緒 375
26.5 獲取Flickr XML數據 377
26.6 從AsyncTask回到主執行緒 382
26.7 深入學習:再探AsyncTask 385
26.8 挑戰練習:分頁 386
第27章 Looper、Handler與HandlerThread 387
27.1 設定GridView以顯示圖片 387
27.2 批量下載縮略圖 390
27.3 與主執行緒通信 390
27.4 創建並啟動後台執行緒 391
27.5 Message與message Handler 393
27.5.1 訊息的剖析 393
27.5.2 Handler的剖析 393
27.5.3 使用handler 395
27.5.4 傳遞handler 397
27.6 深入學習:AsyncTask與Thread 401
27.7 挑戰練習:預載入以及快取 401
第28章 搜尋 402
28.1 搜尋Flickr網站 402
28.2 搜尋對話框 404
28.2.1 創建搜尋界面 404
28.2.2 可搜尋的activity 406
28.2.3 物理搜尋鍵 408
28.2.4 搜尋的工作原理 409
28.2.5 啟動模式與新的intent 410
28.2.6 使用shared preferences實現輕量級數據存儲 412
28.3 在Android 3.0以後版本的設備上使用SearchView 414
28.4 挑戰練習 416
第29章 後台服務 417
29.1 創建IntentService 417
29.2 服務的作用 419
29.3 查找最新返回結果 421
29.4 使用AlarmManager延遲運行服務 422
29.4.1 PendingIntent 424
29.4.2 使用PendingIntent管理定時器 424
29.5 控制定時器 425
29.6 通知信息 428
29.7 深入學習:服務細節內容 429
29.7.1 服務的能與不能 430
29.7.2 服務的生命周期 430
29.7.3 non-sticky服務 430
29.7.4 sticky服務 431
29.7.5 綁定服務 431
第30章 broadcast Intent 433
30.1 隨設備重啟而重啟的定時器 433
30.1.1 配置檔案中的broadcast receiver 434
30.1.2 如何使用receiver 435
30.2 過濾前台通知訊息 436
30.2.1 傳送broadcast intent 437
30.2.2 動態broadcast receiver 437
30.2.3 使用私有許可權 440
30.2.4 使用ordered broadcast接收結果 442
30.3 receiver與長時運行任務 446
第31章 網頁瀏覽 447
31.1 最後一段Flickr數據 447
31.2 簡單方式:使用隱式intent 448
31.3 較難方式:使用WebView 449
31.3.1 使用WebChromeClient最佳化WebView的顯示 453
31.3.2 處理WebView的設備旋轉問題 455
31.4 深入學習:注入JavaScript對象 456
第32章 定製視圖與觸摸事件 457
32.1 創建DragAndDraw項目 457
32.1.1 創建DragAndDraw-Activity 458
32.1.2 創建DragAndDraw-Fragment 459
32.2 創建定製視圖 460
32.3 處理觸摸事件 462
32.4 onDraw(...)方法內的圖形繪製 465
32.5 挑戰練習:設備旋轉問題 467
第33章 跟蹤設備的地理位置 468
33.1 啟動RunTracker項目 468
33.1.1 創建RunActivity 469
33.1.2 創建RunFragment 470
33.2 地理位置與LocationManager 472
33.3 接收定位數據更新broadcast 474
33.4 使用定位數據刷新UI顯示 475
33.5 快速定位:最近一次地理位置 479
33.6 在物理和虛擬設備上測試地理位置定位 480
第34章 使用SQLite本地資料庫 482
34.1 在資料庫中存儲旅程和地理位置信息 482
34.2 查詢資料庫中的旅程列表 488
34.3 使用CursorAdapter顯示旅程列表 490
34.4 創建新旅程 493
34.5 管理現有旅程 494
34.6 挑戰練習:識別當前跟蹤的旅程 500
第35章 使用Loader載入異步數據 501
35.1 Loader與LoaderManager 501
35.2 在RunTracker套用中使用Loader 502
35.3 載入旅程列表 503
35.4 載入單個旅程 506
35.5 載入旅程的最近一次地理位置 509
第36章 使用地圖 511
36.1 添加Maps API給RunTracker套用 511
36.1.1 使用物理設備測試地圖 511
36.1.2 安裝使用Google Play services SDK 511
36.1.3 獲取Google Maps API key 512
36.1.4 更新RunTracker套用的manifest配置檔案 512
36.2 在地圖上顯示用戶的地理位置 513
36.3 顯示旅程路線 516
36.4 為旅程添加開始和結束地圖示注 520
36.5 挑戰練習:實時數據更新 521
第37章 編後語 522
37.1 終極挑戰 522
37.2 關於我們 523
37.3 致謝 523