第1章 初識Android 1
1.1 Android是什麼 1
1.2 Android體係架構 1
1.3 Android發展史 4
第2章 選擇您的開發工具 5
2.1 準備軟件,認識Android Studio 5
2.1.1 什麼是Android Studio 5
2.1.2 為什麼使用Android Studio 6
2.2 安裝Android Studio 6
2.2.1 安裝配置要求 6
2.2.2 下載地址 6
2.2.3 安裝JDK 7
2.2.4 安裝Android Studio 7
2.2.5 設置JDK和Android SDK
目錄 14
2.3 項目的創建 16
2.3.1 創建項目的步驟 16
2.3.2 解決錯誤(沒有錯誤最好) 19
2.4 Android Studio界麵預覽 21
2.5 常用設置 22
2.5.1 設置主題 22
2.5.2 設置字體和格式 22
2.5.3 設置文件編碼 24
2.5.4 設置快捷鍵 24
2.5.5 其他設置 26
2.6 常用快捷鍵 26
2.7 Android工程目錄 27
2.7.1 工程目錄介紹 27
2.7.2 Gradle使用詳解 28
2.7.3 app/build.gradle 28
2.8 SDK目錄介紹 30
2.9 調試程序 31
2.9.1 創建模擬器 31
2.9.2 連接真實手機 33
2.9.3 Genymotion模擬器 34
2.10 程序啓動分析 34
2.11 日誌和注釋 36
2.11.1 注釋 37
2.11.2 日誌 37
2.11.3 設置Android Studio日誌
顯示顔色 38
2.11.4 實際開發中控製日誌 39
2.11.5 Logger的使用 41
總結 42
第3章 界麵的搭建 43
3.1 眼見皆View 43
3.2 布局的搭建方式 43
3.3 常用的控件和屬性 44
3.3.1 TextView 44
3.3.2 Button 45
3.3.3 EditText 46
3.3.4 ImageView 47
3.3.5 ProgressBar 49
3.4 布局的介紹 50
3.4.1 LinearLayout(綫性布局) 50
3.4.2 RelativeLayout(相對布局) 52
3.4.3 FrameLayout(幀布局) 55
3.4.4 GridLayout(網格布局) 56
3.4.5 CoordinatorLayout 58
3.4.6 ConstraintLayout(約束
布局) 61
3.5 提示信息Toast和Snackbar 61
3.5.1 Toast使用詳解 61
3.5.2 修改Toast位置 63
3.5.3 自定義Toast布局 63
3.5.4 避免內存泄露 65
3.5.5 Snackbar 65
3.6 點擊事件三種寫法 68
3.6.1 通過匿名內部類或內部類
實現 68
3.6.2 讓類實現接口 69
3.6.3 在布局文件中注冊事件 70
3.7 使用Lambda錶達式代替匿名
內部類 70
3.7.1 什麼是lambda呢 70
3.7.2 使用Lambda錶達式 71
3.8 AlertDialog提示對話框 73
3.8.1 一般對話框 75
3.8.2 Material Design風格的
對話框 76
3.8.3 列錶對話框 78
3.8.4 單選按鈕對話框 79
3.8.5 多選按鈕對話框 79
3.8.6 自定義AlertDialog 80
3.9 ProgressDialog 81
總結 83
第4章 Activity介紹 84
4.1 Activity之間的跳轉 84
4.1.1 顯示意圖 84
4.1.2 隱式意圖 86
4.1.3 隱式意圖的常見操作 88
4.1.4 IntentFilter匹配規則 89
4.2 Activity之間傳遞數據 92
4.2.1 通過Intent傳遞數據 92
4.2.2 靜態工廠設計模式傳遞
數據 93
4.2.3 返迴數據給之前的Activity 93
4.3 Android 6.0權限的管理 95
4.3.1 Android 6.0新的權限機製 96
4.3.2 申請權限 96
4.3.3 第三方庫RxPermissions 100
4.4 Activity生命周期 101
4.4.1 生命周期的方法 101
4.4.2 Activity銷毀時保存數據 102
4.4.3 鎖定橫竪屏 103
4.4.4 開發時注意事項 104
4.5 Activity任務棧 104
4.6 Activity啓動模式 105
4.6.1 standard 105
4.6.2 singleTop 106
4.6.3 singleTask 106
4.6.4 singleInstance 107
4.6.5 統一管理Activity 108
4.7 Toolbar和Navigation Drawer 109
4.7.1 AppBar的簡介 109
4.7.2 創建菜單 111
4.7.3 Toolbar 112
4.7.4 Toolbar遇上Navigation
Drawer 114
4.8 主題樣式設置 118
總結 120
第5章 數據存儲 121
5.1 SharedPreference 121
5.2 MD5加密 123
5.3 文件存儲數據 124
5.3.1 保存到手機內存(Internal
Storage) 124
5.3.2 SD卡存儲(External
Storage) 127
5.4 SQLite存儲 132
5.4.1 創建數據庫 132
5.4.2 升級數據庫 135
5.4.3 數據庫增刪改查(CURD) 137
5.4.4 SQLite數據庫的事務操作 144
5.5 常見的數據庫框架 146
總結 146
第6章 網絡編程 148
6.1 HTTP協議 148
6.1.1 URL簡介 148
6.1.2 HTTP簡介 149
6.1.3 GET和POST對比 151
6.2 HttpURLConnection 151
6.2.1 為什麼廢棄HttpClient 151
6.2.2 使用HttpURLConnection
聯網 152
6.3 多綫程編程 154
6.3.1 綫程的同步和異步 154
6.3.2 AsycTask 158
6.3.3 RxJava 161
6.4 網絡請求實例 164
6.5 JSON解析 168
6.5.1 使用Android原生方式解析
JSON 169
6.5.2 Gson的使用 170
6.5.3 插件GsonFormat快速實現
JavaBean 174
6.5.4 完成請求實例 176
6.6 網絡請求框架——Retrofit 179
6.6.1 使用Retrofit 179
6.6.2 常用的注解 181
6.6.3 完成請求案例 181
6.6.4 RxJava和Retrofit結閤 183
6.7 WebView 184
6.7.1 WebView配置 186
6.7.2 WebViewClient方法 187
6.7.3 設置WebChromeClient 189
6.7.4 WebView常用的方法 190
6.7.5 WebView模闆代碼 191
總結 196
第7章 圖片的處理 197
7.1 Bitmap和Drawable 197
7.2 大圖的加載 199
7.3 圖片加水印 202
7.4 圖片特效,Matrix 205
7.4.1 縮放 205
7.4.2 倒影、鏡麵 207
7.4.3 鏇轉 208
7.4.4 位移 208
7.5 圖片顔色處理——打造自己的美圖
秀秀 209
7.5.1 顔色過濾器
ColorMatrixColorFilter 209
7.5.2 實現圖片美化功能 210
7.6 案例——隨手塗鴉 214
7.7 加載網絡圖片 217
7.7.1 網絡圖片的緩存策略 217
7.7.2 圖片加載庫Picasso的使用 218
總結 219
第8章 復雜控件的使用 220
8.1 ListView 220
8.1.1 初識ListView 221
8.1.2 定製ListView條目的界麵 222
8.1.3 優化ListView 225
8.1.4 ListView的點擊事件 226
8.1.5 ListView常用的屬性 228
8.2 GridView 229
8.3 RecyclerView 231
8.3.1 初識RecyclerView 231
8.3.2 使用RecyclerView 232
8.3.3 不同的布局排列方式 234
8.3.4 RecyclerView添加點擊
事件 236
8.3.5 RecyclerView添加刪除
數據 237
8.3.6 下拉刷新
SwipeRefreshLayout 237
8.4 CardView 239
8.5 ViewPager 241
8.6 BottomNavigationView(底部
導航) 243
8.7 TabLayout 246
8.7.1 TabLayout使用 246
8.7.2 TabLayout自定義條目
樣式 249
總結 250
第9章 探索Fragment 251
9.1 使用Fragment 252
9.1.1 Fragment的生命周期 252
9.1.2 創建Fragment 252
9.1.3 嚮Activity添加Fragment 254
9.1.4 管理片段 256
9.1.5 Fragment的嚮下兼容 257
9.2 FragmentTabHost實現底部標簽 257
9.3 ViewPager和Fragment結閤 259
總結 273
第10章 廣播接收者 274
10.1 廣播簡介 274
10.2 實現一個BroadcastReceiver 275
10.3 發送自定義廣播 279
10.4 桌麵快捷方式 283
總結 285
第11章 Service介紹 286
11.1 服務的基本用法 286
11.1.1 創建服務 286
11.1.2 啓動和停止服務 287
11.1.3 綁定服務 289
11.1.4 服務的生命周期 292
11.2 IntentService 292
11.3 Service和BroadCastReceiver結閤
使用的案例(兼容Android 7.0) 294
11.3.1 Android 7.0錯誤原因 297
11.3.2 使用FileProvider 298
總結 300
第12章 動畫 301
12.1 補間動畫(Tween Animation) 301
12.2.1 AlphaAnimation(透明度
動畫) 302
12.2.2 ScaleAnimation(縮放
動畫) 304
12.2.3 TranslateAnimation(平移
動畫) 305
12.2.4 RotateAnimation(鏇轉
動畫) 306
12.2 逐幀動畫(Frame Animation) 308
12.3 屬性動畫 310
總結 313
第13章 新特性 314
13.1 Android 7.0分屏開發 314
13.1.1 如何分屏呢 315
13.1.2 多窗口生命周期 315
13.1.3 針對多窗口進行配置 316
13.1.4 多窗口模式中運行應用
注意事項 316
13.1.5 在多窗口模式中啓動新
Activity 317
13.1.6 支持拖放 318
13.2 Android 7.0快速設定 318
13.3 約束布局ConstraintLayout 321
13.3.1 ConstraintLayout簡介 321
13.3.2 添加約束布局 322
13.3.3 使用約束布局 322
13.3.4 添加約束 323
13.3.5 使用自動連接和約束推斷 325
13.3.6 快速對齊Align 326
13.4 使用Kotlin語言開發Android 326
總結 330
第14章 性能優化 331
14.1 性能檢測 331
14.1.1 檢測內存泄露 331
14.1.2 LeakCanary 334
14.1.3 追蹤內存分配 335
14.1.4 查詢方法執行的時間 335
14.2 過度繪製(OverDraw) 336
14.2.1 過度繪製概念 336
14.2.2 追蹤過度繪製 336
14.2.3 去掉不閤理背景 337
14.2.4 不閤理的XML布局對
繪製的影響 338
14.3 避免ANR 338
14.3.1 ANR分析 339
14.3.2 ANR解決方式 341
總結 341
第15章 屏幕適配 342
15.1 Android屏幕適配齣現的原因 342
15.2 相關重要概念 344
15.2.1 屏幕尺寸 344
15.2.2 屏幕分辨率 344
15.2.3 屏幕像素密度 344
15.2.4 屏幕尺寸、分辨率、像素
密度三者關係 344
15.2.5 dip 345
15.2.6 sp 345
15.3 尺寸適配解決方案 346
15.3.1 “布局”適配 346
15.3.2 尺寸(size)限定符 347
15.3.3 最小寬度(Smallest-width)
限定符 348
15.3.4 使用布局彆名 349
15.3.5 屏幕方嚮(Orientation)
限定符 350
15.3.6 “布局組件”匹配 352
15.3.7 Layout_weight詳解 352
15.3.8 “圖片資源”匹配 355
15.3.9 .9的製作 355
15.3.10 “用戶界麵流程”匹配 357
15.4 屏幕密度適配 359
15.4.1 “布局控件”適配 359
15.4.2 百分比布局 360
15.4.3 約束布局 362
總結 362
第16章 自定義控件 363
16.1 自定義控件簡介 363
16.2 View的生命周期 364
16.2.1 構造函數 365
16.2.2 onAttachedToWindow 369
16.2.3 onMeasure 370
16.2.4 onLayout 372
16.2.5 onDraw 372
16.2.6 View更新 373
16.2.7 動畫 374
總結 374
第17章 JNI/NDK開發 375
17.1 NDK配置(最新的CMake
方式) 375
17.1.1 下載 376
17.1.2 創建項目 376
17.1.3 運行項目 378
17.1.4 手動添加native方法 379
總結 380
第18章 開發一個真實的項目 381
18.1 項目需求分析 381
18.2 創建項目 382
18.3 界麵實現 383
18.3.1 啓動界麵 383
18.3.2 引導頁麵 385
18.3.3 主界麵 388
18.3.4 列錶界麵 390
18.4 請求網絡 395
18.5 新聞列錶和詳情 400
18.6 完成整個項目 409
總結 412
· · · · · · (
收起)