內容簡介
Big Nerd Ranch是美國一家專業的移動開發技術培訓機構。本書主要以其Android訓練營教學課程為基礎,融合了幾位作者多年的心得體會,是一本完全面向實戰的Android編程指南。全書共34章,詳細介紹了8個Android 套用。通過這些精心設計的套用,讀者可掌握很多重要的理論知識和開發技巧,獲得前沿的開發經驗。
如果你熟悉Java語言,或者了解面向對象編程,那就立刻開始Android編程之旅吧!
圖書目錄
第 1章 Android開發初體驗 1
1.1 套用開發基礎 1
1.2 創建Android項目 2
1.3 Android Studio使用導航 6
1.4 用戶界面設計 7
1.4.1 視圖層級結構 10
1.4.2 組件屬性 11
1.4.3 創建字元串資源 12
1.4.4 預覽界面布局 12
1.5 從布局XML到視圖對象 13
1.6 組件的實際套用 17
1.6.1 引用組件 18
1.6.2 設定監聽器 18
1.7 創建提示訊息 20
1.8 使用模擬器運行套用 23
1.9 深入學習:Android編譯過程 25
2.1 創建新類 29
2.2 Android與MVC設計模式 32
2.3 更新視圖層 34
2.4 更新控制層 36
2.5 在設備上運行套用 40
2.5.1 連線設備 40
2.5.2 配置設備用於套用開發 41
2.6 添加圖示資源 42
2.6.1 向項目中添加資源 43
2.7 關於挑戰練習 46
2.8 挑戰練習:為TextView添加監聽器 46
2.9 挑戰練習:添加後退按鈕 46
2.10 挑戰練習:從按鈕到圖示按鈕 47
第3章 Activity的生命周期 49
3.1 日誌跟蹤理解Activity生命周期 50
3.1.1 輸出日誌信息 50
3.1.2 使用LogCat 52
3.2 設備旋轉與Activity生命周期 55
3.3 設備旋轉前保存數據 59
3.4 再探Activity生命周期 61
3.5 深入學習:測試onSaveInstanceState(Bundle)方法 62
3.6 深入學習:日誌記錄的級別與方法 64
第4章 Android套用的調試 65
4.1 異常與棧跟蹤 66
4.1.1 診斷套用異常 67
4.1.2 記錄棧跟蹤日誌 68
4.1.3 設定斷點 69
4.1.4 使用異常斷點 72
4.2 Android特有的調試工具 73
4.2.1 使用Android Lint 73
4.2.2 R 類的問題 75
第5章 第 二個activity 76
5.1 創建第 二個activity 77
5.1.1 創建新的activity 78
5.1.2 創建新的activity 子類 81
5.1.3 在manifest配置檔案中聲明activity 81
5.1.4 為QuizActivity添加Cheat按鈕 82
5.2 啟動activity 84
5.3 activity間的數據傳遞 86
5.3.1 使用intent extra 86
5.3.2 從子activity獲取返回結果 89
5.4 activity的使用與管理 94
5.5 挑戰練習 97
第6章 Android SDK版本與兼容 98
6.1 Android SDK版本 98
6.2 Android編程與兼容性問題 99
6.2.1 比較合理的版本 99
6.2.2 SDK**低版本 101
6.2.3 SDK目標版本 101
6.2.4 SDK編譯版本 101
6.2.5 安全添加新版本API中的代碼 101
6.3 使用Android開 發者文檔 104
6.4 挑戰練習:報告編譯版本 106
第7章 UI fragment與fragment管理器 107
7.1 UI 設計的靈活性需求 108
7.2 fragment的引入 108
7.3 著手開發CriminalIntent 109
7.3.1 創建新項目 112
7.3.2 fragment與支持庫 113
7.3.3 在Android Studio中增加依賴關係 114
7.3.4 創建Crime類 117
7.4 託管UI fragment 118
7.4.1 fragment的生命周期 118
7.4.2 託管的兩種方式 119
7.4.3 定義容器視圖 119
7.5 創建UI fragment 120
7.5.1 定義CrimeFragment的布局 121
7.5.2 創建CrimeFragment類 122
7.6 添加UI fragment到FragmentManager 125
7.6.1 fragment事務 126
7.6.2 FragmentManager與fragment生命周期 129
7.7 採用fragment的套用架構 130
7.8 深入學習:為什麼應優先使用支持庫版fragment 131
7.9 深入學習:使用作業系統內置版fragment 131
第8章 使用布局與組件創建用戶界面 132
8.2 更新布局 133
8.3 生成並使用組件 135
8.4 深入探討XML布局屬性 136
8.4.1 樣式、主題及主題屬性 136
8.4.2 dp、sp以及螢幕像素密度 137
8.4.3 Android開發設計原則 138
8.4.4 布局參數 139
8.4.5 邊距與內邊距 139
8.5 使用圖形布局工具 140
8.5.1 創建水平模式布局 141
8.5.2 添加新組件 142
8.5.3 在屬性視圖中編輯組件屬性 143
8.5.4 在框架視圖中重新組織組件 144
8.5.5 更新子組件的布局參數 145
8.5.6 android:layout_weight屬性的工作原理 146
8.5.7 圖形布局工具使用總結 147
8.5.8 組件ID與多種布局 148
8.6 挑戰練習:日期格式化 148
第9章 使用RecyclerView顯示列表 150
9.2 使用抽象activity託管fragment 153
9.2.1 通用的fragment託管布局 153
9.2.2 抽象activity類 154
9.3 RecyclerView、Adapter和ViewHolder 158
9.3.1 ViewHolder和Adapter 159
9.3.2 使用RecyclerView 161
9.3.3 實現Adapter和ViewHolder 166
9.4.1 創建列表項布局 166
9.4.2 使用定製列表項視圖 168
9.5 回響點擊 170
9.6 深入學習:ListView和GridView 171
9.7 深入學習:單例 171
第 10章 使用fragment argument 173
10.1 從fragment中啟動activity 173
10.1.1 附加extra信息 174
10.1.2 獲取extra信息 175
10.1.3 使用Crime數據更新CrimeFragment視圖 176
10.1.4 直接獲取extra信息的缺點 177
10.2 fragment argument 177
10.2.1 附加argument給fragment 178
10.2.2 獲取argument 179
10.3 刷新顯示列表項 180
10.4 通過fragment獲取返回結果 182
10.5 挑戰練習:實現高效的RecyclerView 刷新 183
10.6 深入學習:為何要用fragment argument 183
第 11章 使用ViewPager 185
11.1 創建CrimePagerActivity 186
11.1.1 ViewPager與PagerAdapter 187
11.1.2 整合併配置使用CrimePagerActivity 188
11.2 FragmentStatePagerAdapter與FragmentPagerAdapter 190
11.3 深入學習:ViewPager的工作原理 192
11.4 深入學習:以代碼的方式創建布局 193
第 12章 對話框 194
12.1 使用AppCompat兼容庫 195
12.2 創建DialogFragment 196
12.2.1 顯示DialogFragment 198
12.2.2 設定對話框的顯示內容 199
12.3 fragment間的數據傳遞 202
12.3.1 傳遞數據給DatePickerFragment 203
12.3.2 返回數據給CrimeFragment 204
12.4 挑戰練習:更多對話框 211
12.5 挑戰練習:按設備類型展現DialogFragment 212
第 13章 工具列 213
13.1 AppCompat 213
13.2 工具列選單 216
13.2.1 在
XML檔案中定義選單....... 217
13.2.2 創建選單 221
13.2.3 回響選單項選擇 223
13.3 實現層級式導航 225
13.4 可選選單項 226
13.4.1 切換選單項標題 227
13.4.2 “還有個問題” 229
13.5 深入學習:工具列與操作欄 231
13.6 挑戰練習:刪除crime記錄 231
13.7 挑戰練習:最佳化字元串資源顯示 231
13.8 挑戰練習:用於RecyclerView的空視圖 232
第 14章 SQLite資料庫 233
14.1 定義Schema 233
14.2 創建初始資料庫 234
14.3 修改CrimeLab類 238
14.4 寫入資料庫 239
14.4.1 使用ContentValues 239
14.4.2 插入和更新記錄 240
14.5 讀取資料庫 242
14.5.1 使用CursorWrapper 243
14.5.2 創建模型層對象 244
14.6 深入學習:資料庫高 級主題介紹 247
14.7 深入學習:套用上下文 248
14.8 挑戰練習:刪除Crime記錄 248
第 15章 隱式intent 249
15.1 添加按鈕組件 250
15.2 添加嫌疑人信息到模型層 252
15.3 使用格式化字元串 254
15.4 使用隱式intent 255
15.4.1 隱式intent的組成 255
15.4.2 傳送訊息 256
15.4.3 獲取聯繫人信息 259
15.4.4 檢查可回響任務的activity 263
15.5 挑戰練習:ShareCompat 265
15.6 挑戰練習:又一個隱式intent 265
第 16章 使用intent拍照 266
16.1 布置照片 266
16.2 外部存儲 269
16.3 使用相機intent 272
16.3.1 外部存儲使用許可權 272
16.3.2 觸發拍照 273
16.4 縮放和顯示點陣圖 274
16.5 功能聲明 277
16.6 深入學習:使用include標籤 278
16.7 挑戰練習:最佳化照片顯示 278
16.8 挑戰練習:最佳化縮略圖載入 279
第 17章 Master-Detail用戶界面 280
17.1 增加布局靈活性 281
17.1.1 修改SingleFragmentActivity 282
17.1.2 創建包含兩個fragment容器的布局 283
17.1.3 使用別名資源 284
17.1.4 創建平板設備專用可選資源 285
17.2 Activity:fragment的託管者 286
17.3 深入學習:設備螢幕尺寸的確定 295
第 18章 Assets 297
18.1 為何使用assets 297
18.2 創建BeatBox 套用 298
18.3 導入assets 301
18.4 處理assets 303
18.5 使用Assets 305
18.6 訪問Assets 308
18.7 深入學習:什麼是non-assets 308
第 19章 使用SoundPool播放音頻 309
19.1 創建SoundPool 309
19.2 載入音頻檔案 310
19.3 播放音頻 311
19.4 釋放音頻 313
19.5 設備旋轉和對象保存 314
19.5.1 保留fragment 315
19.5.2 旋轉和已保留fragment 316
19.6 深入學習:是否要保留 318
19.7 深入學習:設備旋轉處理再探 318
第 20章 樣式與主題 321
20.1 顏色資源 321
20.2 樣式 322
20.3 主題 324
20.4 添加主題顏色 327
20.5 覆蓋主題屬性 328
20.6 修改按鈕屬性 332
20.7 深入學習:樣式繼承拾遺 334
20.8 深入學習:引用主題屬性 335
20.9 挑戰練習:創建多版本主題 335
第 21章 XML drawable 336
21.1 統一按鈕樣式 337
21.2 shape drawable 338
21.3 state list drawable 340
21.4 layer list drawable 341
21.5 深入學習:為什麼要用XML drawable 342
21.6 深入學習:使用9-patch圖像 343
21.7 深入學習:使用Mipmap圖像 347
第 22章 深入學習intent和任務 348
22.1 創建NerdLauncher項目 348
22.2 解析隱式intent 351
22.3 在運行時創建顯式intent 355
22.4 任務與後退棧 357
22.4.1 在任務間切換 357
22.4.2 啟動新任務 358
22.5 使用NerdLauncher套用作為設備主螢幕 361
22.6 挑戰練習:套用圖示 362
22.7 深入學習:進程與任務 362
22.8 深入學習:並發文檔 364
第 23章 HTTP與後台任務 367
23.1 創建PhotoGallery套用 368
23.2 網路連線基本 371
23.3 使用AsyncTask在後台執行緒上運行代碼 373
23.4 執行緒與主執行緒 374
23.5 從Flickr獲取JSON數據 376
23.6 從AsyncTask回到主執行緒 383
23.7 清理AsyncTask 386
23.8 深入學習:AsyncTask再探 387
23.9 深入學習:AsyncTask的替代方案 388
23.10 挑戰練習:Gson 388
23.11 挑戰練習:分頁 388
23.12 挑戰練習:動態調整格線列 389
第 24章 Looper、Handler和HandlerThread 390
24.1 配置RecyclerView以顯示圖片 390
24.2 批量下載縮略圖 393
24.3 與主執行緒通信 393
24.4 創建並啟動後台執行緒 394
24.5 Message與message handler 396
24.5.1 訊息的剖析 397
24.5.2 Handler的剖析 397
24.5.3 使用handler 398
24.5.4 傳遞handler 402
24.6 深入學習:AsyncTask與執行緒 407
24.7 挑戰練習:預載入以及快取 407
24.8 深入學習:解決圖片下載問題 408
第 25章 搜尋 409
25.1 搜尋Flickr 網站 410
25.2 使用SearchView 414
25.3 使用shared preferences實現輕量級數據存儲 419
25.4 最佳化套用 422
25.5 挑戰練習:深度最佳化PhotoGallery套用 423
第 26章 後台服務 424
26.1 創建IntentService 424
26.2 服務的作用 427
26.3 查找最新返回結果 428
26.4 使用AlarmManager延遲運行服務 430
26.4.1 合理控制服務啟動的頻度 432
26.4.2 PendingIntent 433
26.4.3 使用PendingIntent管理定時器 434
26.5 控制定時器 434
26.6 通知信息 437
26.7 挑戰練習:可穿戴設備上的通知 439
26.8 深入學習:服務細節內容 440
26.8.1 服務的能與不能 440
26.8.2 服務的生命周期 440
26.8.3 non-sticky服務 440
26.8.4 sticky 服務 441
26.8.5 綁定服務 441
26.9 深入學習:JobScheduler和JobService 442
26.10 深入學習:Sync Adapter 445
26.11 挑戰練習:在Lollipop設備上使用JobService 446
第 27 章 broadcast intent 447
27.1 一般intent 和broadcast intent 447
27.2 接收系統broadcast:重啟後喚醒 448
27.2.1 standalone receiver 448
27.2.2 使用receiver 450
27.3 過濾前台通知訊息 452
27.3.1 傳送broadcast intent 452
27.3.2 動態broadcast receiver 453
27.3.3 使用私有許可權 455
27.3.4 使用有序broadcast 458
27.4 receiver與長時運行任務 462
27.5 深入學習:本地事件 462
27.5.1 使用EventBus 463
27.5.2 使用Rxjava 463
27.6 深入學習:檢測fragment的狀態 464
第 28章 網頁瀏覽 466
28.1 最後一段Flickr數據 466
28.2 簡單方式:隱式intent 469
28.3 較難方式:使用WebView 470
28.4 處理WebView的設備旋轉問題 476
28.5 深入學習:注入JavaScript對象 477
28.6 深入學習:KitKat的WebView 478
28.7 挑戰練習:使用後退鍵瀏覽歷史網頁 478
28.8 挑戰練習:非HTTP連結支持 479
第 29章 定製視圖與觸摸事件 480
29.1 創建DragAndDraw項目 480
29.1.1 創建DragAndDrawActivity 481
29.1.2 創建DragAndDrawFragment 481
29.2 創建定製視圖 482
29.3 處理觸摸事件 484
29.4 onDraw(...)方法內的圖形繪製 488
29.5 挑戰練習:設備旋轉問題 490
29.6 挑戰練習:旋轉矩形框 490
第30章 屬性動畫 492
30.1 建立場景 492
30.2 簡單屬性動畫 495
30.2.1 視圖屬性轉換 498
30.2.2 使用不同的interpolator 500
30.2.3 色彩漸變 500
30.3 播放多個動畫 502
30.4 深入學習:其他動畫API 504
30.4.1 傳統動畫工具 504
30.4.2 轉場 504
30.5 挑戰練習 504
第31章 地理位置和Play服務 505
31.1 地理位置和定位類庫 505
31.2 創建Locatr項目 506
31.3 Play 服務和模擬器 507
31.4 創建Locatr套用 510
31.5 配置Google Play服務 512
31.6 使用Google Play服務 514
31.7 基於地理位置的Flickr搜尋 516
31.8 獲取定位數據 517
31.9 尋找並顯示圖片 519
31.10 挑戰練習:進度指示器 521
第32章 使用地圖 522
32.1 導入Play地圖服務庫 522
32.2 Android上的地圖服務 522
32.4 創建地圖 525
32.5 獲取更多地理位置數據 526
32.6 使用地圖 529
32.7 深入學習:團隊開發和API key 534
第33章 material design 536
33.1 material surface 536
33.1.1 elevation和Z值 538
33.1.2 state list animator 539
33.2 動畫工具 540
33.2.1 circular reveal 541
33.2.2 shared element transition 542
33.3 新的視圖組件 545
33.3.1 card 545
33.3.2 floating action button 547
33.3.3 snackbar 548
33.4 深入學習material design 549
第34 章 編後語 550
34.1 終 極挑戰 550
34.2 關於我們 551
34.3 致謝 551