Android 編程權威指南, 3/e (Android Programming: The Big Nerd Ranch Guide, 3/e)

比爾·菲利普斯, 克裡斯·斯圖爾特, 克莉絲汀·馬西卡諾

買這商品的人也買了...

商品描述

Big Nerd Ranch是美國一家專業的移動開發技術培訓機構。本書主要以其Android訓練營教學課程為基礎,融合了幾位作者多年的心得體會,是一本完全面向實戰的Android編程權威指南。全書共36章,詳細介紹了8個Android應用的開發過程。通過這些精心設計的應用,讀者可掌握很多重要的理論知識和開發技巧,獲得寶貴的開發經驗。第3版較之前版本增加了對數據綁定等新工具的介紹,同時新增了針對單元測試、輔助功能和MVVM架構等主題的章節。

作者簡介

作者:[美]比爾·菲利普斯克里斯·斯圖爾特克莉絲汀·馬西卡諾(Bill Phillips、 Chris Stewart、 Kristin Marsicano)譯者:王明發

Bill Phillips 
Big Nerd Ranch資深講師。他與人合作開發了廣受好評的Android訓練營培訓課程,並為之編寫教材(包括本書的第1版和第2版)。Bill一直堅持撰寫博客、閱讀各類文學作品、作曲奏樂以及著書。

Chris Stewart 
Big Nerd Ranch的Android團隊主管、Android訓練營資深講師。他致力於不斷取得進步和精進技能。工作之餘,Chris喜歡遠足和旅行。

Kristin Marsicano 
Big Nerd Ranch資深講師、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著手開發Criminal Intent 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定義Crime Fragment的佈局115 
7.5.2創建Crime Fragment類117 
7.6向Fragment Manager添加UI fragment 122 
7.6.1 fragment事務123 
7.6.2 Fragment Manager與fragment生命週期125 
7.7採用fragment的應用架構126 
7.8深入學習:fragment與支持庫127 
7.9深入學習:為什麼優先使用支持庫版fragment 128 

第8章使用Recycler View顯示列表129 
8.1升級Criminal Intent應用的模型層130
8.2使用抽象activity託管fragment 132 
8.2.1通用型fragment託管佈局133 
8.2.2抽象activity類133 
8.3 Recycler View、View Holder和Adapter 137 
8.3.1 View Holder和Adapter 138 
8.3.2使用Recycler View 141 
8.3.3列表項視圖142 
8.3.4實現View Holder和Adapter 143 
8.4綁定列表項145 
8.5響應點擊147 
8.6深入學習:List View和Grid View 148 
8.7深入學習:單例148 
8.8挑戰練習:Recycler View View Type 149 

第9章使用佈局與組件創建用戶界面150 
9.1使用圖形佈局工具151 
9.2引入Constraint Layout 151 
9.2.1使用Constraint Layout 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數據更新Crime Fragment視圖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挑戰練習:實現高效的Recycler View刷新178 
10.7挑戰練習:優化CrimeLab的表現178 

第11章使用View Pager 179 
11.1創建Crime Pager Activity 180
11.1.1 View Pager與Pager Adapter 181 
11.1.2整合併配置使用Crime Pager Activity 182 
11.2 FragmentState Pager Adapter與Fragment Pager Adapter 184 
11.3深入學習:View Pager的工作原理186 
11.4深入學習:以代碼的方式創建視圖187 
11.5挑戰練習:恢復Crime Fragment的邊距187 
11.6挑戰練習:添加Jump to First按鈕和Jump to Last按鈕188 

第12章對話框189 
12.1創建Dialog Fragment 190 
12.1.1顯示Dialog Fragment 192 
12.1.2設置對話框的顯示內容194 
12.2 fragment間的數據傳遞196 
12.2.1傳遞數據給Date Picker Fragment 197 
12.2.2返回數據給Crime Fragment 199 
12.3挑戰練習:更多對話框205 
12.4挑戰練習:實現響應式Dialog Fragment 205 

第13章工具欄207 
13.1 App Compat 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挑戰練習:用於Recycler View的空視圖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挑戰練習:Share Compat 256 
15.6挑戰練習:又一個隱式intent 256 

第16章使用intent拍照258 
16.1佈置照片258 
16.2文件存儲260 
16.2.1使用File Provider 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修改Single Fragment Activity 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 Talk Back 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創建Beat Box應用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 Binding Adapter 333 
20.9深入學習:為何使用assets 334 
20.10深入學習:什麼是non—assets 334 

第21章音頻播放與單元測試335 
21.1創建Sound Pool 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創建Nerd Launcher項目380 
24.2解析隱式intent 382 
24.3在運行時創建顯式intent 386 
24.4任務與回退棧388 
24.4.1在任務間切換389 
24.4.2啟動新任務389 
24.5使用Nerd Launcher應用作為設備主屏幕392 
24.6挑戰練習:應用圖標393 
24.7深入學習:進程與任務393 
24.8深入學習:並發文檔395 

第25章HTTP與後台任務398 
25.1創建Photo Gallery應用399 
25.2網絡連接基本401 
25.3使用Async Task在後台線程上運行代碼403 
25.4線程與主線程405 
25.5從Flickr獲取JSON數據407 
25.6從Async Task回到主線程413 
25.7清理Async Task 416 
25.8深入學習:Async Task再探416 
25.9深入學習:Async Task的替代方案417 
25.10挑戰練習:Gson 418 
25.11挑戰練習:分頁418 
25.12挑戰練習:動態調整網格列418

第26章Looper、Handler和Handler Thread 420 
26.1配置Recycler View以顯示圖片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深入學習:Async Task與線程436 
26.7深入學習:解決圖片下載問題436 
26.8深入學習:Strict Mode 437 
26.9挑戰練習:預加載以及緩存438 

第27章搜索439 
27.1搜索Flickr網站439 
27.2使用Search View 443 
27.3使用shared preferences實現輕量級數據存儲447 
27.4優化應用451 
27.5挑戰練習:深度優化Photo Gallery應用451 

第28章後台服務452 
28.1創建Intent Service 452 
28.2服務的作用454 
28.3查找最新返回結果456
28.4使用Alarm Manager延遲運行服務458 
28.4.1合理控制服務啟動的頻度460 
28.4.2 Pending Intent 461 
28.4.3使用Pending Intent管理定時器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深入學習:Job Scheduler和Job Service 469 
28.10挑戰練習:在Lollipop設備上使用Job Service 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使用Event Bus 489 
29.5.2使用Rx Java 490 
29.6深入學習:探測fragment的狀態490 

第30章網頁瀏覽492 
30.1最後一段Flickr數據492 
30.2簡單方式:隱式intent 494 
30.3較難方式:使用Web View 496 
30.4處理Web View的設備旋轉問題502 
30.5深入學習:注入Java Script對象502 
30.6深入學習:Web View升級503 
30.7挑戰練習:使用後退鍵瀏覽歷史網頁504 
30.8挑戰練習:非HTTP鏈接支持504 

第31章定制視圖與觸摸事件505 
31.1創建Drag And Draw項目505 
31.2創建定制視圖507 
31.3處理觸摸事件509 
31.4 on Draw(...)方法內的圖形繪製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