- 看完了 更新時間:2021-06-15 15:30:19
- 作者簡介
- 32.3 致謝
- 32.2 插個廣告
- 32.1 終極挑戰
- 第 32 章 編后語
- 31.5 挑戰練習
- 31.4 深入學習:其他動畫API
- 31.3 播放多個動畫
- 31.2 簡單屬性動畫
- 31.1 建立場景
- 第 31 章 屬性動畫
- 30.8 挑戰練習:輔助功能支持
- 30.7 挑戰練習:旋轉矩形框
- 30.6 挑戰練習:設備旋轉問題
- 30.5 深入學習:GestureDetector
- 30.4 onDraw(Canvas)函數內的圖形繪制
- 30.3 處理觸摸事件
- 30.2 創建定制視圖
- 30.1 創建DragAndDraw項目
- 第 30 章 定制視圖與觸摸事件
- 29.9 挑戰練習:使用回退鍵瀏覽歷史網頁
- 29.8 深入學習:Chrome Custom Tabs
- 29.7 深入學習:WebView升級
- 29.6 深入學習:注入JavaScript對象
- 29.5 WebView與定制UI
- 29.4 處理WebView的設備旋轉問題
- 29.3 較難的方式:使用WebView
- 29.2 簡單方式:使用隱式intent
- 29.1 最后一段Flickr數據
- 第 29 章 網頁瀏覽
- 28.6 深入學習:探測fragment的狀態
- 28.5 深入學習:受限的Broadcast Receiver
- 28.4 深入學習:本地事件
- 28.3 receiver與長時運行任務
- 28.2 過濾前臺通知
- 28.1 普通intent與broadcast intent
- 第 28 章 broadcast intent
- 27.5 服務的用戶控制
- 27.4 通知用戶
- 27.3 檢查新圖片
- 27.2 調度工作
- 27.1 創建Worker類
- 第 27 章 WorkManager
- 26.6 挑戰練習:優化PhotoGallery應用
- 26.5 用Android KTX編輯SharedPreferences
- 26.4 優化應用
- 26.3 使用sharedpreferences實現輕量級數據存儲
- 26.2 使用SearchView
- 26.1 搜索Flickr網站
- 第 26 章 搜索
- 25.12 挑戰練習:預加載以及緩存
- 25.11 挑戰練習:優化ThumbnailDownloader
- 25.10 挑戰練習:觀察視圖LifecycleOwner的LiveData
- 25.9 深入學習:StrictMode
- 25.8 深入學習:解決圖片下載問題
- 25.7 保留fragment
- 25.6 觀察視圖的生命周期
- 25.5 Message與message handler
- 25.4 創建后臺線程
- 25.3 批量下載縮略圖
- 25.2 準備下載數據
- 25.1 配置RecyclerView以顯示圖片
- 第 25 章 Looper、Handler和HandlerThread
- 24.11 挑戰練習:動態調整網格列
- 24.10 挑戰練習:分頁
- 24.9 挑戰練習:自定義Gson反序列化器
- 24.8 深入學習:管理依賴
- 24.7 深入學習:撤銷網絡請求
- 24.6 深入學習:其他JSON數據解析器和數據格式
- 24.5 在RecyclerView里顯示結果
- 24.4 應對設備配置改變
- 24.3 從Flickr獲取JSON數據
- 24.2 Retrofit網絡連接基本
- 24.1 創建PhotoGallery應用
- 第 24 章 HTTP與后臺任務
- 23.8 挑戰練習:應用圖標
- 23.7 深入學習:并發文檔
- 23.6 深入學習:進程與任務
- 23.5 用NerdLauncher當主屏幕
- 23.4 任務與回退棧
- 23.3 在運行時創建顯式intent
- 23.2 解析隱式intent
- 23.1 創建NerdLauncher項目
- 第 23 章 深入學習intent和任務
- 22.8 挑戰練習:按鈕主題
- 22.7 深入學習:使用9-patch圖像
- 22.6 深入學習:使用mipmap圖像
- 22.5 深入學習:為什么要用XML drawable
- 22.4 layer list drawable
- 22.3 state list drawable
- 22.2 shape drawable
- 22.1 統一按鈕樣式
- 第 22 章 XML drawable
- 21.8 深入學習:引用主題屬性
- 21.7 深入學習:樣式繼承拾遺
- 21.6 修改按鈕屬性
- 21.5 覆蓋主題屬性
- 21.4 添加主題顏色
- 21.3 主題
- 21.2 樣式
- 21.1 顏色資源
- 第 21 章 樣式與主題
- 20.14 挑戰練習:設備旋轉問題
- 20.13 挑戰練習:播放進度控制
- 20.12 深入學習:模擬對象與測試
- 20.11 深入學習:整合測試
- 20.10 釋放音頻
- 20.9 數據綁定回調
- 20.8 編寫測試函數
- 20.7 配置測試類
- 20.6 創建測試類
- 20.5 測試依賴
- 20.4 播放音頻
- 20.3 加載音頻文件
- 20.2 訪問Assets
- 20.1 創建SoundPool
- 第 20 章 音頻播放與單元測試
- 19.10 深入學習:LiveData和數據綁定
- 19.9 深入學習:數據綁定再探
- 19.8 綁定數據
- 19.7 使用assets
- 19.6 處理assets
- 19.5 導入assets
- 19.4 實現簡單的數據綁定
- 19.3 創建BeatBox應用
- 19.2 MVVM View Model與Jetpack ViewModel
- 19.1 為何要用MVVM架構
- 第 19 章 數據綁定與MVVM
- 18.7 挑戰練習:事件主動通知
- 18.6 挑戰練習:補全上下文信息
- 18.5 挑戰練習:優化列表項
- 18.4 深入學習:使用輔助功能掃描器
- 18.3 提升輔助體驗
- 18.2 實現非文字型元素可讀
- 18.1 TalkBack
- 第 18 章 Android輔助功能
- 17.5 挑戰練習:日期顯示本地化
- 17.4 深入學習:確定設備屏幕尺寸
- 17.3 測試備選資源
- 17.2 配置修飾符
- 17.1 資源本地化
- 第 17 章 應用本地化
- 16.7 挑戰練習:優化縮略圖加載
- 16.6 挑戰練習:優化照片顯示
- 16.5 功能聲明
- 16.4 縮放和顯示位圖
- 16.3 使用相機intent
- 16.2 文件存儲
- 16.1 布置照片
- 第 16 章 使用intent拍照
- 15.5 挑戰練習:又一個隱式intent
- 15.4 使用隱式intent
- 15.3 使用格式化字符串
- 15.2 添加嫌疑人信息至模型層
- 15.1 添加按鈕部件
- 第 15 章 隱式intent
- 14.6 挑戰練習:RecyclerView空視圖
- 14.5 深入學習:AppCompat版應用欄
- 14.4 深入學習:應用欄、操作欄與工具欄
- 14.3 使用Android Asset Studio
- 14.2 應用欄菜單
- 14.1 AppCompat默認應用欄
- 第 14 章 應用欄
- 13.3 挑戰練習:時間選擇對話框
- 13.2 fragment間的數據傳遞
- 13.1 創建DialogFragment
- 第 13 章 對話框
- 12.7 挑戰練習:實現高效的RecyclerView刷新
- 12.6 深入學習:Navigation架構組件庫
- 12.5 深入學習:為何要用Fragment Argument
- 12.4 更新數據庫
- 12.3 使用LiveData數據轉換
- 12.2 Fragment argument
- 12.1 單Activity多Fragment
- 第 12 章 Fragment Navigation
- 11.9 深入學習:單例
- 11.8 挑戰練習:解決Schema警告
- 11.7 使用LiveData
- 11.6 應用線程
- 11.5 測試數據庫訪問
- 11.4 使用倉庫模式訪問數據庫
- 11.3 定義數據庫訪問對象
- 11.2 創建數據庫
- 11.1 Room架構組建庫
- 第 11 章 數據庫與Room庫
- 10.7 挑戰練習:日期格式化
- 10.6 深入學習:ConstraintLayout的發展動態
- 10.5 深入學習:邊距與內邊距
- 10.4 深入學習布局屬性
- 10.3 使用ConstraintLayout
- 10.2 圖形布局編輯器
- 10.1 初識ConstraintLayout布局
- 第 10 章 使用布局與部件創建用戶界面
- 9.10 挑戰練習:RecyclerView的ViewType
- 9.9 深入學習:ListView與GridView
- 9.8 響應點擊
- 9.7 清理綁定
- 9.6 循環使用視圖
- 9.5 使用Adapter填充RecyclerView
- 9.4 ViewHolder實現
- 9.3 創建列表項視圖布局
- 9.2 添加RecyclerView
- 9.1 添加新Fragment和ViewModel
- 第 9 章 使用RecyclerView顯示列表
- 8.7 采用fragment的應用架構
- 8.6 托管UI fragment
- 8.5 創建UI fragment
- 8.4 創建Crime數據類
- 8.3 著手開發CriminalIntent
- 8.2 引入fragment
- 8.1 UI設計的靈活性需求
- 第 8 章 UI fragment與fragment管理器
- 7.5 挑戰練習:限制作弊次數
- 7.4 挑戰練習:報告編譯版本
- 7.3 使用Android開發者文檔
- 7.2 Android編程與兼容性問題
- 7.1 Android SDK版本
- 第 7 章 Android SDK版本與兼容
- 6.6 挑戰練習:按題記錄作弊狀態
- 6.5 挑戰練習:堵住作弊漏洞
- 6.4 activity的使用與管理
- 6.3 activity間的數據傳遞
- 6.2 啟動activity
- 6.1 創建第二個activity
- 第 6 章 第二個activity
- 5.4 挑戰練習:探索Android性能分析器
- 5.3 挑戰練習:探索布局檢查器
- 5.2 Android特有的調試工具
- 5.1 異常與棧跟蹤
- 第 5 章 Android應用的調試
- 4.6 深入學習:解決問題要徹底
- 4.5 深入學習:Jetpack、AndroidX與架構組件
- 4.4 ViewModel與保存實例狀態
- 4.3 進程銷毀時保存數據
- 4.2 添加ViewModel
- 4.1 引入ViewModel依賴
- 第 4 章 UI狀態的保存與恢復
- 3.9 挑戰練習:答題評分
- 3.8 挑戰練習:禁止一題多答
- 3.7 深入學習:日志記錄的級別與函數
- 3.6 深入學習:UI刷新與多窗口模式
- 3.5 設備配置改變與activity生命周期
- 3.4 activity生命周期如何響應用戶操作
- 3.3 日志跟蹤理解activity生命周期
- 3.2 activity狀態與生命周期回調
- 3.1 旋轉GeoQuiz應用
- 第 3 章 activity的生命周期
- 2.10 挑戰練習:從按鈕到圖標按鈕
- 2.9 挑戰練習:添加后退按鈕
- 2.8 挑戰練習:為TextView添加監聽器
- 2.7 在物理設備上運行應用
- 2.6 屏幕像素密度
- 2.5 添加圖標資源
- 2.4 更新控制器層
- 2.3 更新視圖層
- 2.2 Android與MVC設計模式
- 2.1 創建新類
- 第 2 章 Android與MVC設計模式
- 1.11 挑戰練習:定制toast消息
- 1.10 關于挑戰練習
- 1.9 深入學習:Android編譯過程
- 1.8 使用模擬器運行應用
- 1.7 創建提示消息
- 1.6 部件的實際應用
- 1.5 從布局XML到視圖對象
- 1.4 用戶界面設計
- 1.3 Android Studio使用導航
- 1.2 創建Android項目
- 1.1 Android開發基礎
- 第 1 章 Android開發初體驗
- 致謝
- 開發必備工具
- 如何學習Android開發
- 獻詞
- 版權聲明
- 版權信息
- 封面
- 封面
- 版權信息
- 版權聲明
- 獻詞
- 如何學習Android開發
- 開發必備工具
- 致謝
- 第 1 章 Android開發初體驗
- 1.1 Android開發基礎
- 1.2 創建Android項目
- 1.3 Android Studio使用導航
- 1.4 用戶界面設計
- 1.5 從布局XML到視圖對象
- 1.6 部件的實際應用
- 1.7 創建提示消息
- 1.8 使用模擬器運行應用
- 1.9 深入學習:Android編譯過程
- 1.10 關于挑戰練習
- 1.11 挑戰練習:定制toast消息
- 第 2 章 Android與MVC設計模式
- 2.1 創建新類
- 2.2 Android與MVC設計模式
- 2.3 更新視圖層
- 2.4 更新控制器層
- 2.5 添加圖標資源
- 2.6 屏幕像素密度
- 2.7 在物理設備上運行應用
- 2.8 挑戰練習:為TextView添加監聽器
- 2.9 挑戰練習:添加后退按鈕
- 2.10 挑戰練習:從按鈕到圖標按鈕
- 第 3 章 activity的生命周期
- 3.1 旋轉GeoQuiz應用
- 3.2 activity狀態與生命周期回調
- 3.3 日志跟蹤理解activity生命周期
- 3.4 activity生命周期如何響應用戶操作
- 3.5 設備配置改變與activity生命周期
- 3.6 深入學習:UI刷新與多窗口模式
- 3.7 深入學習:日志記錄的級別與函數
- 3.8 挑戰練習:禁止一題多答
- 3.9 挑戰練習:答題評分
- 第 4 章 UI狀態的保存與恢復
- 4.1 引入ViewModel依賴
- 4.2 添加ViewModel
- 4.3 進程銷毀時保存數據
- 4.4 ViewModel與保存實例狀態
- 4.5 深入學習:Jetpack、AndroidX與架構組件
- 4.6 深入學習:解決問題要徹底
- 第 5 章 Android應用的調試
- 5.1 異常與棧跟蹤
- 5.2 Android特有的調試工具
- 5.3 挑戰練習:探索布局檢查器
- 5.4 挑戰練習:探索Android性能分析器
- 第 6 章 第二個activity
- 6.1 創建第二個activity
- 6.2 啟動activity
- 6.3 activity間的數據傳遞
- 6.4 activity的使用與管理
- 6.5 挑戰練習:堵住作弊漏洞
- 6.6 挑戰練習:按題記錄作弊狀態
- 第 7 章 Android SDK版本與兼容
- 7.1 Android SDK版本
- 7.2 Android編程與兼容性問題
- 7.3 使用Android開發者文檔
- 7.4 挑戰練習:報告編譯版本
- 7.5 挑戰練習:限制作弊次數
- 第 8 章 UI fragment與fragment管理器
- 8.1 UI設計的靈活性需求
- 8.2 引入fragment
- 8.3 著手開發CriminalIntent
- 8.4 創建Crime數據類
- 8.5 創建UI fragment
- 8.6 托管UI fragment
- 8.7 采用fragment的應用架構
- 第 9 章 使用RecyclerView顯示列表
- 9.1 添加新Fragment和ViewModel
- 9.2 添加RecyclerView
- 9.3 創建列表項視圖布局
- 9.4 ViewHolder實現
- 9.5 使用Adapter填充RecyclerView
- 9.6 循環使用視圖
- 9.7 清理綁定
- 9.8 響應點擊
- 9.9 深入學習:ListView與GridView
- 9.10 挑戰練習:RecyclerView的ViewType
- 第 10 章 使用布局與部件創建用戶界面
- 10.1 初識ConstraintLayout布局
- 10.2 圖形布局編輯器
- 10.3 使用ConstraintLayout
- 10.4 深入學習布局屬性
- 10.5 深入學習:邊距與內邊距
- 10.6 深入學習:ConstraintLayout的發展動態
- 10.7 挑戰練習:日期格式化
- 第 11 章 數據庫與Room庫
- 11.1 Room架構組建庫
- 11.2 創建數據庫
- 11.3 定義數據庫訪問對象
- 11.4 使用倉庫模式訪問數據庫
- 11.5 測試數據庫訪問
- 11.6 應用線程
- 11.7 使用LiveData
- 11.8 挑戰練習:解決Schema警告
- 11.9 深入學習:單例
- 第 12 章 Fragment Navigation
- 12.1 單Activity多Fragment
- 12.2 Fragment argument
- 12.3 使用LiveData數據轉換
- 12.4 更新數據庫
- 12.5 深入學習:為何要用Fragment Argument
- 12.6 深入學習:Navigation架構組件庫
- 12.7 挑戰練習:實現高效的RecyclerView刷新
- 第 13 章 對話框
- 13.1 創建DialogFragment
- 13.2 fragment間的數據傳遞
- 13.3 挑戰練習:時間選擇對話框
- 第 14 章 應用欄
- 14.1 AppCompat默認應用欄
- 14.2 應用欄菜單
- 14.3 使用Android Asset Studio
- 14.4 深入學習:應用欄、操作欄與工具欄
- 14.5 深入學習:AppCompat版應用欄
- 14.6 挑戰練習:RecyclerView空視圖
- 第 15 章 隱式intent
- 15.1 添加按鈕部件
- 15.2 添加嫌疑人信息至模型層
- 15.3 使用格式化字符串
- 15.4 使用隱式intent
- 15.5 挑戰練習:又一個隱式intent
- 第 16 章 使用intent拍照
- 16.1 布置照片
- 16.2 文件存儲
- 16.3 使用相機intent
- 16.4 縮放和顯示位圖
- 16.5 功能聲明
- 16.6 挑戰練習:優化照片顯示
- 16.7 挑戰練習:優化縮略圖加載
- 第 17 章 應用本地化
- 17.1 資源本地化
- 17.2 配置修飾符
- 17.3 測試備選資源
- 17.4 深入學習:確定設備屏幕尺寸
- 17.5 挑戰練習:日期顯示本地化
- 第 18 章 Android輔助功能
- 18.1 TalkBack
- 18.2 實現非文字型元素可讀
- 18.3 提升輔助體驗
- 18.4 深入學習:使用輔助功能掃描器
- 18.5 挑戰練習:優化列表項
- 18.6 挑戰練習:補全上下文信息
- 18.7 挑戰練習:事件主動通知
- 第 19 章 數據綁定與MVVM
- 19.1 為何要用MVVM架構
- 19.2 MVVM View Model與Jetpack ViewModel
- 19.3 創建BeatBox應用
- 19.4 實現簡單的數據綁定
- 19.5 導入assets
- 19.6 處理assets
- 19.7 使用assets
- 19.8 綁定數據
- 19.9 深入學習:數據綁定再探
- 19.10 深入學習:LiveData和數據綁定
- 第 20 章 音頻播放與單元測試
- 20.1 創建SoundPool
- 20.2 訪問Assets
- 20.3 加載音頻文件
- 20.4 播放音頻
- 20.5 測試依賴
- 20.6 創建測試類
- 20.7 配置測試類
- 20.8 編寫測試函數
- 20.9 數據綁定回調
- 20.10 釋放音頻
- 20.11 深入學習:整合測試
- 20.12 深入學習:模擬對象與測試
- 20.13 挑戰練習:播放進度控制
- 20.14 挑戰練習:設備旋轉問題
- 第 21 章 樣式與主題
- 21.1 顏色資源
- 21.2 樣式
- 21.3 主題
- 21.4 添加主題顏色
- 21.5 覆蓋主題屬性
- 21.6 修改按鈕屬性
- 21.7 深入學習:樣式繼承拾遺
- 21.8 深入學習:引用主題屬性
- 第 22 章 XML drawable
- 22.1 統一按鈕樣式
- 22.2 shape drawable
- 22.3 state list drawable
- 22.4 layer list drawable
- 22.5 深入學習:為什么要用XML drawable
- 22.6 深入學習:使用mipmap圖像
- 22.7 深入學習:使用9-patch圖像
- 22.8 挑戰練習:按鈕主題
- 第 23 章 深入學習intent和任務
- 23.1 創建NerdLauncher項目
- 23.2 解析隱式intent
- 23.3 在運行時創建顯式intent
- 23.4 任務與回退棧
- 23.5 用NerdLauncher當主屏幕
- 23.6 深入學習:進程與任務
- 23.7 深入學習:并發文檔
- 23.8 挑戰練習:應用圖標
- 第 24 章 HTTP與后臺任務
- 24.1 創建PhotoGallery應用
- 24.2 Retrofit網絡連接基本
- 24.3 從Flickr獲取JSON數據
- 24.4 應對設備配置改變
- 24.5 在RecyclerView里顯示結果
- 24.6 深入學習:其他JSON數據解析器和數據格式
- 24.7 深入學習:撤銷網絡請求
- 24.8 深入學習:管理依賴
- 24.9 挑戰練習:自定義Gson反序列化器
- 24.10 挑戰練習:分頁
- 24.11 挑戰練習:動態調整網格列
- 第 25 章 Looper、Handler和HandlerThread
- 25.1 配置RecyclerView以顯示圖片
- 25.2 準備下載數據
- 25.3 批量下載縮略圖
- 25.4 創建后臺線程
- 25.5 Message與message handler
- 25.6 觀察視圖的生命周期
- 25.7 保留fragment
- 25.8 深入學習:解決圖片下載問題
- 25.9 深入學習:StrictMode
- 25.10 挑戰練習:觀察視圖LifecycleOwner的LiveData
- 25.11 挑戰練習:優化ThumbnailDownloader
- 25.12 挑戰練習:預加載以及緩存
- 第 26 章 搜索
- 26.1 搜索Flickr網站
- 26.2 使用SearchView
- 26.3 使用sharedpreferences實現輕量級數據存儲
- 26.4 優化應用
- 26.5 用Android KTX編輯SharedPreferences
- 26.6 挑戰練習:優化PhotoGallery應用
- 第 27 章 WorkManager
- 27.1 創建Worker類
- 27.2 調度工作
- 27.3 檢查新圖片
- 27.4 通知用戶
- 27.5 服務的用戶控制
- 第 28 章 broadcast intent
- 28.1 普通intent與broadcast intent
- 28.2 過濾前臺通知
- 28.3 receiver與長時運行任務
- 28.4 深入學習:本地事件
- 28.5 深入學習:受限的Broadcast Receiver
- 28.6 深入學習:探測fragment的狀態
- 第 29 章 網頁瀏覽
- 29.1 最后一段Flickr數據
- 29.2 簡單方式:使用隱式intent
- 29.3 較難的方式:使用WebView
- 29.4 處理WebView的設備旋轉問題
- 29.5 WebView與定制UI
- 29.6 深入學習:注入JavaScript對象
- 29.7 深入學習:WebView升級
- 29.8 深入學習:Chrome Custom Tabs
- 29.9 挑戰練習:使用回退鍵瀏覽歷史網頁
- 第 30 章 定制視圖與觸摸事件
- 30.1 創建DragAndDraw項目
- 30.2 創建定制視圖
- 30.3 處理觸摸事件
- 30.4 onDraw(Canvas)函數內的圖形繪制
- 30.5 深入學習:GestureDetector
- 30.6 挑戰練習:設備旋轉問題
- 30.7 挑戰練習:旋轉矩形框
- 30.8 挑戰練習:輔助功能支持
- 第 31 章 屬性動畫
- 31.1 建立場景
- 31.2 簡單屬性動畫
- 31.3 播放多個動畫
- 31.4 深入學習:其他動畫API
- 31.5 挑戰練習
- 第 32 章 編后語
- 32.1 終極挑戰
- 32.2 插個廣告
- 32.3 致謝
- 作者簡介
- 看完了 更新時間:2021-06-15 15:30:19