第1章 Android簡介 1
1.1 簡介 2
1.2 Android――世界領先的移動操作系統 2
1.3 Android的特點 3
1.4 Android操作系統 5
1.4.1 Android 2.2 (Froyo) 5
1.4.2 Android 2.3 (Gingerbread) 6
1.4.3 Android 3.0~3.2 (Honeycomb) 6
1.4.4 Android 4.0~4.0.4 (Ice Cream Sandwich) 6
1.4.5 Android 4.1~4.3 (Jelly Bean) 7
1.4.6 Android 4.4 (KitKat) 8
1.4.7 Android 5.0和5.1 (Lollipop) 8
1.4.8 Android 6 (Marshmallow) 9
1.5 從Google Play下載應用 9
1.6 包 10
1.7 Android軟件開發(fā)工具集(SDK) 11
1.8 面向對象編程:簡短回顧 13
1.8.1 汽車作為對象 13
1.8.2 方法與類 13
1.8.3 實例化 14
1.8.4 復用 14
1.8.5 消息與方法調用 14
1.8.6 屬性與實例變量 14
1.8.7 封裝 14
1.8.8 繼承 14
1.8.9 面向對象的分析與設計(OOAD) 14
1.9 在AVD中測試Tip Calculator應用 15
1.9.1 在Android Studio中打開Tip Calculator應用的工程 15
1.9.2 創(chuàng)建Android虛擬設備(AVD) 16
1.9.3 在Nexus 6 AVD中運行Tip Calculator應用 18
1.9.4 在Android設備上運行Tip Calculator應用 20
1.10 創(chuàng)建好的Android應用 21
1.11 Android開發(fā)資源 22
1.12 小結 23
第2章 Welcome應用 24
2.1 簡介 25
2.2 技術概覽 26
2.2.1 Android Studio 26
2.2.2 LinearLayout,TextView和ImageView 26
2.2.3 可擴展標記語言(XML) 26
2.2.4 應用的資源 26
2.2.5 輔助性 26
2.2.6 國際化 27
2.3 創(chuàng)建應用 27
2.3.1 啟動Android Studio 27
2.3.2 創(chuàng)建新工程 27
2.3.3 Create New Project對話框 28
2.3.4 Target Android Devices步驟 28
2.3.5 Add an Activity to Mobile步驟 29
2.3.6 Customize the Activity步驟 30
2.4 Android Studio窗口 31
2.4.1 Project窗口 31
2.4.2 編輯器窗口 32
2.4.3 Component Tree窗口 33
2.4.4 應用的資源文件 33
2.4.5 布局編輯器 33
2.4.6 默認GUI 33
2.4.7 默認GUI的XML 34
2.5 用布局編輯器構建應用的GUI 35
2.5.1 向工程添加圖像 35
2.5.2 添加應用圖標 36
2.5.3 將RelativeLayout 改成LinearLayout 37
2.5.4 改變LinearLayout的id和orientation屬性 38
2.5.5 配置TextView的id和text屬性 39
2.5.6 配置TextView的textSize屬性 40
2.5.7 設置TextView的textColor屬性 41
2.5.8 設置TextView的gravity屬性 41
2.5.9 設置TextView的layout:gravity屬性 41
2.5.10 設置TextView的layout:weight屬性 43
2.5.11 添加ImageView,顯示圖像 43
2.5.12 預覽設計的效果 46
2.6 運行Welcome應用 46
2.7 為應用增加輔助功能 48
2.8 使應用國際化 49
2.8.1 本地化 49
2.8.2 為本地化資源命名文件夾 49
2.8.3 將字符串譯文添加到工程中 49
2.8.4 本地化字符串 50
2.8.5 在AVD中測試西班牙語的應用 50
2.8.6 在設備中測試西班牙語的應用 51
2.8.7 TalkBack與本地化 51
2.8.8 本地化清單 52
2.8.9 專業(yè)翻譯 52
2.9 小結 52
第3章 Tip Calculator應用 53
3.1 簡介 54
3.2 測試驅動的Tip Calculator應用 55
3.3 技術概覽 56
3.3.1 Activity類 56
3.3.2 Activity類的生命周期方法 56
3.3.3 AppCompat庫與AppCompatActivity類 57
3.3.4 安排GridLayout中的視圖 57
3.3.5 利用布局編輯器、Component Tree和Properties窗口創(chuàng)建并定制GUI 58
3.3.6 格式化數字,表示本地貨幣和百分比字符串 58
3.3.7 實現TextWatcher接口,處理EditText中的文本變化 58
3.3.8 實現OnSeekBarChangeListener接口,處理SeekBar中的滑塊位置變化 58
3.3.9 材料主題 58
3.3.10 材料設計:高度和陰影 59
3.3.11 材料設計:顏色 59
3.3.12 AndroidManifest.xml 60
3.3.13 在Properties窗口中搜索 60
3.4 構建GUI 60
3.4.1 GridLayout簡介 60
3.4.2 創(chuàng)建TipCalculator工程 61
3.4.3 改成GridLayout布局 61
3.4.4 添加TextView,EditText和SeekBar 62
3.4.5 定制視圖 64
3.5 默認主題及定制主題顏色 66
3.5.1 parent主題 66
3.5.2 定制主題顏色 67
3.5.3 樣式的常用View屬性值 70
3.6 添加應用的邏輯功能 70
3.6.1 package聲明和import聲明 70
3.6.2 AppCompatActivity的MainActivity子類 71
3.6.3 類變量與實例變量 71
3.6.4 重寫Activity方法onCreate 72
3.6.5 MainActivity方法calculate 74
3.6.6 實現OnSeekBarChangeListener接口的匿名內部類 74
3.6.7 實現TextWatcher接口的匿名內部類 75
3.7 AndroidManifest.xml 76
3.7.1 manifest元素 77
3.7.2 application元素 77
3.7.3 activity元素 77
3.7.4 intent-filter元素 78
3.8 小結 79
第4章 Flag Quiz應用 80
4.1 簡介 81
4.2 測試驅動的Flag Quiz應用 83
4.2.1 配置應用的設置 83
4.2.2 運行應用 84
4.3 技術概覽 86
4.3.1 菜單 86
4.3.2 Fragment 86
4.3.3 Fragment生命周期方法 87
4.3.4 管理Fragment 88
4.3.5 首選項 88
4.3.6 assets文件夾 88
4.3.7 資源文件夾 89
4.3.8 支持不同屏幕尺寸和分辨率 89
4.3.9 確定設備方向 90
4.3.10 用于顯示消息的Toast 90
4.3.11 使用Handler在未來執(zhí)行一個Runnable對象 90
4.3.12 將動畫用于View 90
4.3.13 使用ViewAnimationUtils創(chuàng)建環(huán)形縮放動畫 90
4.3.14 通過顏色狀態(tài)表根據視圖狀態(tài)確定顏色 90
4.3.15 AlertDialog 91
4.3.16 為異常消息做日志 91
4.3.17 通過顯示Intent啟動另一個活動 91
4.3.18 Java數據結構 92
4.3.19 Java SE 7特性 92
4.3.20 AndroidManifest.xml 93
4.4 創(chuàng)建工程、資源文件和另外的類 93
4.4.1 創(chuàng)建工程 93
4.4.2 Blank Activity模板布局 94
4.4.3 配置對Java SE 7的支持 94
4.4.4 向工程添加國旗圖像 95
4.4.5 strings.xml與格式化字符串資源 95
4.4.6 arrays.xml 96
4.4.7 colors.xml 97
4.4.8 button_text_color.xml 98
4.4.9 編輯menu_main.xml 98
4.4.10 創(chuàng)建國旗飄揚動畫 99
4.4.11 指定應用設置的preferences.xml 100
4.4.12 添加SettingsActivity類和SettingsActivityFragment類 101
4.5 構建應用的GUI 102
4.5.1 用于縱向模式設備的activity_main.xml布局 102
4.5.2 設計fragment_main.xml布局 102
4.5.3 Graphical Layout編輯器工具欄 106
4.5.4 用于橫向設備的content_main.xml布局 107
4.6 MainActivity類 108
4.6.1 package聲明和import聲明 109
4.6.2 字段 109
4.6.3 重寫的Activity方法onCreate 109
4.6.4 重寫的Activity方法onStart 111
4.6.5 重寫的Activity方法onCreateOptionsMenu 112
4.6.6 重寫的Activity方法onOptionsItemSelected 112
4.6.7 實現OnSharedPreferenceChangeListener的匿名內部類 113
4.7 MainActivityFragment類 114
4.7.1 package聲明和import聲明 114
4.7.2 字段 114
4.7.3 重寫的Fragment方法onCreateView 116
4.7.4 updateGuessRows方法 118
4.7.5 updateRegions方法 118
4.7.6 resetQuiz方法 119
4.7.7 loadNextFlag方法 120
4.7.8 getCountryName方法 122
4.7.9 animate方法 122
4.7.10 實現OnClickListener的匿名內部類 123
4.7.11 disableButtons方法 126
4.8 SettingsActivity類 126
4.9 SettingsActivityFragment類 127
4.10 AndroidManifest.xml 127
4.11 小結 129
第5章 Doodlz應用 130
5.1 簡介 131
5.2 在AVD中測試Doodlz應用 132
5.3 技術概覽 135
5.3.1 Activity和Fragment的生命周期方法 135
5.3.2 定制視圖 136
5.3.3 使用SensorManager監(jiān)聽加速計事件 136
5.3.4 定制的DialogFragment 136
5.3.5 使用Canvas,Paint和Bitmap畫圖 137
5.3.6 處理多點觸事件并在Path中保存線信息 137
5.3.7 保存圖形 138
5.3.8 打印功能及Android支持庫的PrintHelper類 138
5.3.9 Android 6.0的新許可模型 138
5.3.10 利用Gradle構建系統添加依賴性 138
5.4 創(chuàng)建工程和資源 138
5.4.1 創(chuàng)建工程 139
5.4.2 Gradle:向工程添加支持庫 139
5.4.3 strings.xml 139
5.4.4 為菜單項導入材料設計圖標 140
5.4.5 MainActivityFragment菜單 140
5.4.6 在AndroidManifest.xml中添加許可 142
5.5 構建應用的GUI 142
5.5.1 MainActivity的content_main.xml布局 142
5.5.2 MainActivityFragment的fragment_main.xml布局 143
5.5.3 ColorDialogFragment的fragment_color.xml布局 143
5.5.4 LineWidthDialogFragment的fragment_line_width.xml布局 145
5.5.5 添加EraseImageDialogFragment類 146
5.6 MainActivity類 146
5.7 MainActivityFragment類 147
5.7.1 package聲明、import聲明與字段 147
5.7.2 重寫的Fragment方法onCreateView 148
5.7.3 onResume方法和enableAccelerometerListening方法 149
5.7.4 onPause方法和disableAccelerometerListening方法 150
5.7.5 用于處理加速計事件的匿名內部類 150
5.7.6 confirmErase方法 151
5.7.7 重寫的Fragment方法onCreateOptionsMenu和onOptionsItemSelected 152
5.7.8 saveImage方法 153
5.7.9 重寫的onRequestPermissionsResult方法 154
5.7.10 getDoodleView方法和setDialogOnScreen方法 155
5.8 DoodleView類 155
5.8.1 package聲明和import聲明 155
5.8.2 靜態(tài)變量和實例變量 156
5.8.3 構造方法 156
5.8.4 重寫的View方法onSizeChanged 156
5.8.5 clear, setDrawingColor,getDrawingColor,setLineWidth和getLineWidth方法 157
5.8.6 重寫的View方法onDraw 158
5.8.7 重寫的View方法onTouchEvent 158
5.8.8 touchStarted方法 159
5.8.9 touchMoved方法 160
5.8.10 touchEnded方法 161
5.8.11 saveImage方法 161
5.8.12 printImage方法 162
5.9 ColorDialogFragment類 163
5.9.1 重寫的DialogFragment方法onCreateDialog 163
5.9.2 getDoodleFragment方法 165
5.9.3 重寫的Fragment生命周期方法onAttach和onDetach 165
5.9.4 響應alpha, red, green和blue SeekBar事件的匿名內部類 165
5.10 LineWidthDialogFragment類 166
5.10.1 onCreateDialog方法 168
5.10.2 響應widthSeekBar事件的匿名內部類 168
5.11 EraseImageDialogFragment類 169
5.12 小結 170
第6章 Cannon Game應用 171
6.1 簡介 172
6.2 測試驅動的Cannon Game應用 173
6.3 技術概覽 173
6.3.1 使用res/raw資源文件夾 173
6.3.2 Activity和Fragment的生命周期方法 173
6.3.3 重寫View方法onTouchEvent 174
6.3.4 用SoundPool和AudioManager添加聲音 174
6.3.5 用Thread,SurfaceView和SurfaceHolder實現逐幀動畫 174
6.3.6 簡單的沖突檢測 175
6.3.7 沉浸模式 175
6.4 構建應用的GUI和資源文件 175
6.4.1 創(chuàng)建工程 175
6.4.2 調整主題,刪除應用標題和應用欄 175
6.4.3 strings.xml 176
6.4.4 顏色 176
6.4.5 為應用添加聲音 176
6.4.6 添加MainActivityFragment類 176
6.4.7 編輯activity_main.xml 177
6.4.8 將CannonView添加到fragment_main.xml 177
6.5 應用中各個類的概述 178
6.6 Activity的MainActivity子類 178
6.7 Fragment的MainActivityFragment子類 179
6.8 GameElement類 180
6.8.1 實例變量與構造方法 181
6.8.2 update, draw和playSound方法 181
6.9 GameElement的Blocker子類 181
6.10 GameElement的Target子類 182
6.11 Cannon類 183
6.11.1 實例變量與構造方法 183
6.11.2 align方法 183
6.11.3 fireCannonball方法 184
6.11.4 draw方法 184
6.11.5 getCannonball和removeCannonball方法 185
6.12 GameElement的Cannonball子類 185
6.12.1 實例變量與構造方法 185
6.12.2 getRadius,collidesWith,isOnScreen和reverseVelocityX方法 186
6.12.3 update方法 187
6.12.4 draw方法 187
6.13 SurfaceView的CannonView子類 187
6.13.1 package聲明和import聲明 187
6.13.2 常量與實例變量 188
6.13.3 構造方法 189
6.13.4 重寫View方法onSizeChanged 191
6.13.5 getScreenWidth,getScreenHeight和playSound方法 191
6.13.6 newGame方法 192
6.13.7 updatePositions方法 194
6.13.8 alignAndFireCannonball方法 195
6.13.9 showGameOverDialog方法 195
6.13.10 drawGameElements方法 196
6.13.11 testForCollisions方法 197
6.13.12 stopGame和releaseResources方法 197
6.13.13 實現SurfaceHolder.Callback方法 199
6.13.14 重寫View方法onTouchEvent 199
6.13.15 CannonThread:使用Thread實現游戲的循環(huán) 200
6.13.16 hideSystemBars和showSystemBars方法 201
6.14 小結 202
第7章 WeatherViewer應用 203
7.1 簡介 204
7.2 測試驅動的WeatherViewer應用 204
7.3 技術概覽 205
7.3.1 Web服務 205
7.3.2 JSON與org.json包 206
7.3.3 調用REST Web服務的HttpUrlConnection 208
7.3.4 使用AsyncTask執(zhí)行GUI線程以外的網絡請求 208
7.3.5 ListView,ArrayAdapter與View-Holder模式 209
7.3.6 FloatingActionButton 210
7.3.7 TextInputLayout 210
7.3.8 Snackbar 210
7.4 構建應用的GUI和資源文件 210
7.4.1 創(chuàng)建工程 210
7.4.2 AndroidManifest.xml 211
7.4.3 strings.xml 211
7.4.4 colors.xml 211
7.4.5 activity_main.xml 212
7.4.6 content_main.xml 212
7.4.7 list_item.xml 213
7.5 Weather類 214
7.5.1 package聲明、import聲明與實例變量 214
7.5.2 構造方法 215
7.5.3 convertTimeStampToDay方法 216
7.6 WeatherArrayAdapter類 216
7.6.1 package聲明和import聲明 216
7.6.2 嵌套類ViewHolder 217
7.6.3 實例變量與構造方法 217
7.6.4 重寫的ArrayAdapter方法getView 218
7.6.5 用于在獨立線程中下載圖像的AsyncTask子類 219
7.7 MainActivity類 221
7.7.1 package聲明和import聲明 221
7.7.2 實例變量 222
7.7.3 重寫的Activity方法onCreate 222
7.7.4 dismissKeyboard方法和createURL方法 223
7.7.5 調用Web服務的AsyncTask子類 224
7.7.6 convertJSONtoArrayList方法 226
7.8 小結 227
第8章 Twitter Searches應用 228
8.1 簡介 229
8.2 測試驅動的應用 230
8.2.1 添加一個搜索 230
8.2.2 查看搜索Twitter的結果 231
8.2.3 編輯搜索 232
8.2.4 共享搜索 233
8.2.5 刪除搜索 234
8.2.6 滾動瀏覽保存的搜索 234
8.3 技術概覽 234
8.3.1 將鍵/值對數據保存到SharedPreferences文件 234
8.3.2 隱式Intent和意圖選擇器 235
8.3.3 RecyclerView 235
8.3.4 RecyclerView.Adapter和RecyclerView.ViewHolder 236
8.3.5 RecyclerView.ItemDecoration 236
8.3.6 在AlertDialog中顯示選項清單 236
8.4 構建應用的GUI和資源文件 236
8.4.1 創(chuàng)建工程 236
8.4.2 AndroidManifest.xml 237
8.4.3 添加RecyclerView庫 237
8.4.4 colors.xml 237
8.4.5 strings.xml 237
8.4.6 arrays.xml 237
8.4.7 dimens.xml 238
8.4.8 添加Save按鈕圖標 238
8.4.9 activity_main.xml 238
8.4.10 content_main.xml 239
8.4.11 RecyclerView項的布局:list_item.xml 241
8.5 MainActivity類 242
8.5.1 package聲明和import聲明 242
8.5.2 MainActivity類 242
8.5.3 重寫的Activity方法onCreate 243
8.5.4 TextWatcher事件處理器和updateSaveFAB方法 245
8.5.5 saveButton的OnClickListener接口 246
8.5.6 addTaggedSearch方法 247
8.5.7 實現View.OnClickListener,顯示搜索結果的匿名內部類 247
8.5.8 實現View.OnLongClickListener的匿名內部類 248
8.5.9 shareSearch方法 250
8.5.10 deleteSearch方法 251
8.6 RecyclerView.Adapter的SearchesAdapter子類 252
8.6.1 package聲明、import聲明、實例變量和構造方法 252
8.6.2 RecyclerView.ViewHolder的嵌套ViewHolder子類 252
8.6.3 重寫RecyclerView.Adapter方法 253
8.7 RecyclerView.ItemDecoration的ItemDivider 子類 254
8.8 Fabric:Twitter的新移動開發(fā)平臺 255
8.9 小結 256
第9章 Address Book應用 257
9.1 簡介 258
9.2 測試驅動的Address Book應用 260
9.2.1 添加聯系人信息 260
9.2.2 查看聯系人信息 260
9.2.3 編輯聯系人信息 260
9.2.4 刪除聯系人信息 262
9.3 技術概覽 262
9.3.1 用FragmentTransaction顯示Fragment 262
9.3.2 在Fragment與宿主Activity之間交換數據 263
9.3.3 操作SQLite數據庫 263
9.3.4 ContentProvider和ContentResolver 263
9.3.5 Loader和LoaderManager――異步數據庫訪問 264
9.3.6 定義樣式并應用于GUI組件 264
9.3.7 指定TextView背景 265
9.4 構建應用的GUI和資源文件 265
9.4.1 創(chuàng)建工程 265
9.4.2 創(chuàng)建應用的類 265
9.4.3 添加應用圖標 266
9.4.4 strings.xml 266
9.4.5 styles.xml 266
9.4.6 textview_border.xml 267
9.4.7 MainActivity的布局 268
9.4.8 ContactsFragment的布局 270
9.4.9 DetailFragment的布局 270
9.4.10 AddEditFragment的布局 271
9.4.11 DetailFragment的菜單 273
9.5 應用中各個類的概述 273
9.6 DatabaseDescription類 274
9.6.1 靜態(tài)字段 274
9.6.2 嵌套Contact類 275
9.7 AddressBookDatabaseHelper類 275
9.8 AddressBookContentProvider類 277
9.8.1 AddressBookContentProvider字段 277
9.8.2 重寫的onCreate和getType方法 278
9.8.3 重寫的query方法 279
9.8.4 重寫的insert方法 281
9.8.5 重寫的update方法 282
9.8.6 重寫的delete方法 283
9.9 MainActivity類 284
9.9.1 超類及實現的接口和字段 284
9.9.2 重寫的onCreate方法 285
9.9.3 ContactsFragment.ContactsFragmentListener方法 285
9.9.4 displayContact方法 286
9.9.5 displayAddEditFragment方法 287
9.9.6 DetailFragment.DetailFragmentListener方法 288
9.9.7 AddEditFragment.AddEditFragmentListener方法 288
9.10 ContactsFragment類 289
9.10.1 超類及實現的接口 289
9.10.2 ContactsFragmentListener 289
9.10.3 字段 290
9.10.4 重寫的Fragment方法onCreateView 290
9.10.5 重寫的Fragment方法onAttach和onDetach 291
9.10.6 重寫的Fragment方法onActivityCreated 291
9.10.7 updateContactList方法 292
9.10.8 LoaderManager.LoaderCallbacks<Cursor>方法 292
9.11 ContactsAdapter類 293
9.12 AddEditFragment類 296
9.12.1 超類及實現的接口 296
9.12.2 AddEditFragmentListener 297
9.12.3 字段 297
9.12.4 重寫的Fragment方法onAttach,onDetach和onCreateView 298
9.12.5 TextWatcher nameChangedListener和updateSaveButtonFAB方法 299
9.12.6 View.OnClickListener saveContactButtonClicked和saveContact方法 300
9.12.7 LoaderManager.LoaderCallbacks<Cursor>方法 301
9.13 DetailFragment類 302
9.13.1 超類及實現的接口 303
9.13.2 DetailFragmentListener 303
9.13.3 字段 303
9.13.4 重寫的onAttach,onDetach和onCreateView方法 304
9.13.5 重寫的onCreateOptionsMenu和onOptionsItemSelected方法 305
9.13.6 deleteContact方法和DialogFragment confirmDelete 306
9.13.7 LoaderManager.LoaderCallback<Cursor>方法 306
9.14 小結 308
第10章 Google Play及應用的商業(yè)問題 309
10.1 簡介 309
10.2 為發(fā)布應用做準備 310
10.2.1 測試應用 310
10.2.2 最終用戶協議 311
10.2.3 圖標與卷標 311
10.2.4 為應用定義版本 311
10.2.5 為已付費應用提供訪問控制授權 312
10.2.6 弄亂源代碼 312
10.2.7 獲取密鑰,對應用進行數字簽名 312
10.2.8 有特色的圖像和屏幕截圖 312
10.2.9 用于推廣應用的視頻 313
10.3 為應用定價:免費或收費 314
10.3.1 付費應用 314
10.3.2 免費應用 314
10.4 利用In-App Advertising貨幣化應用 315
10.5 貨幣化應用:通過應用內計費功能銷售虛擬商品 315
10.6 注冊Google Play 316
10.7 設置Google Payments商家賬號 317
10.8 將應用上載到Google Play 317
10.9 在應用里啟動Play Store 319
10.10 管理Google Play中的應用 319
10.11 其他的Android應用市場 319
10.12 其他移動應用平臺及應用移植 320
10.13 應用的市場推廣 320
10.14 小結 323
索引 324