編輯推薦
適讀人群 :本書適閤希望從事 Android 應用開發的初學者, 也適閤作為該領域中高級開發者的參考書。 *書中采用瞭以應用為中心的方法,包含8個完整編碼的Android應用。
*專業的程序員開發者指南,講解如何利用Android 6和Android Studio開發用於智能手機和平闆電腦的應用。
*實用、例子豐富的Android教程。
內容簡介
本書是美國知名編程教材的作者針對Android係統下進行應用開發而編寫的一本入門級教程,全書以"應用驅動的方法”為基礎,詳細講解瞭17個完整的Android應用的開發過程,並提供瞭8個APP應用的完整的源代碼。這些應用經過精心挑選,從不同側麵展現瞭Android係統各個功能模塊的編程方法。這些功能包括音頻、視頻、動畫、電話、藍牙、語音識彆、加速度計、GPS、指北針、應用窗件、3D圖形等, 它們都是從事Android應用開發所必須熟知的基本技術。
作者簡介
Paul Deitel和Harvey Deitel是全球暢銷的編程語言教材和專業圖書作傢,他們成立的Deitel & Associates公司是一傢國際知名的企業培訓和寫作公司,專門進行計算機編程語言、對象技術、移動應用開發及Internet和Web軟件技術方麵的培訓和寫作,齣版瞭一流的編程專業的大學教材、 專業圖書以及LiveLessons視頻課程。
張君施,北京工商大學數理係副教授,黨支部書記。研究方嚮為概率論與數理統計、計算機語言,翻譯過多部經典編程教材。
目錄
第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軟件開發工具集(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 創建Android虛擬設備(AVD) 16
1.9.3 在Nexus 6 AVD中運行Tip Calculator應用 18
1.9.4 在Android設備上運行Tip Calculator應用 20
1.10 創建好的Android應用 21
1.11 Android開發資源 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 創建應用 27
2.3.1 啓動Android Studio 27
2.3.2 創建新工程 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 專業翻譯 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窗口創建並定製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 創建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在未來執行一個Runnable對象 90
4.3.12 將動畫用於View 90
4.3.13 使用ViewAnimationUtils創建環形縮放動畫 90
4.3.14 通過顔色狀態錶根據視圖狀態確定顔色 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 創建工程、資源文件和另外的類 93
4.4.1 創建工程 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 創建國旗飄揚動畫 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監聽加速計事件 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 創建工程和資源 138
5.4.1 創建工程 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 靜態變量和實例變量 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 創建工程 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實現遊戲的循環 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執行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 創建工程 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 創建工程 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的新移動開發平颱 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 創建工程 265
9.4.2 創建應用的類 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 靜態字段 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及應用的商業問題 309
10.1 簡介 309
10.2 為發布應用做準備 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
前言/序言
前 言
歡迎來到使用Android軟件開發工具集(SDK)、Java編程語言以及快速發展的Android Studio集成開發環境(IDE)的充滿活力的世界,進行Android智能手機和平闆電腦應用的開發。書中講解的許多Android開發技術,同樣適用於Android Wear和Android TV應用的開發。這樣在學習完本書之後,就為這些平颱下的應用開發做好瞭充分準備。
本書將為專業軟件開發人員提供前沿的移動計算技術。本書是以開發完整的、可運行的應用來講解各種概念的,而沒有采用隻分析代碼段的方式。第2~9章中的每一章都給齣瞭一個應用。這些章的開頭是應用的介紹,並通過測試給齣瞭一個或者多個執行樣本的結果,還給齣瞭一個技術概覽。然後,會詳細分析源代碼。全部源代碼都可以從以下站點下載:
學習本書時,建議在IDE中打開相應的源代碼。
對Android應用開發人員而言,機會無處不在。Android設備的銷售以及應用的下載量,正呈現齣指數級的增長。第一代Android手機於2008年10月麵世。根據IDC公布的數據,到2015年3月底,全球智能手機市場Android占據78%的份額,Apple為18.3%,而Blackberry隻有0.3% 。在2014年 ,Android設備的齣貨量超過10億。2015年Google I/O開發者大會上,Google宣布在過去12個月中,Google Play已經有500億的應用安裝量。Google Play是Google的Android應用市場 。主流的移動平颱以及運營商之間激烈的市場競爭,導緻瞭技術的快速更新和價格的下滑。此外,數百個Android設備廠商之間的競爭,也推動瞭Android社區裏硬件和軟件的創新。
關於版權以及代碼許可的說明
本書中的全部代碼以及Android應用的版權都由Deitel & Associates公司所有,書中樣本程序的授權許可遵循Creative Commons Attribution 3.0 Unported License(http://creativecommons.org/ licenses/by/3.0),但是它們不能在教育性的其他教程和課本中使用(書本格式或者數字化格式)。此外,作者及齣版方並不以任何形式、明確或暗示地保證書中的程序或文檔的正確性。對於使用這些程序而導緻的直接或間接損失,作者和齣版方不承擔任何責任。歡迎讀者將書中的這些應用作為你自己的應用的起點,在已有的這些功能上進行改動(需滿足前述版權條款)。如果有任何問題,可聯係deitel@deitel.com。
讀者對象
本書假定讀者已經具備一定的Java編程基礎,並瞭解麵嚮對象編程。同時,讀者還需熟悉XML。Android工程中包含許多XML文件,但通常是通過編輯器與它們交互,從而無須直接瞭解它們。書中使用的是完整的、可運行的應用,所以如果不瞭解Java,但具有以C語言為基礎的麵嚮對象編程語言的經驗,比如C++,C#,Swift或者Objective-C,則應當能夠很快熟悉這些材料,學習到大量的Java知識以及Java風格的麵嚮對象編程。
本書並非一本Java教程。如果對學習Java編程感興趣,請參考作者的下列齣版物:
? Java for Programmers, 3/e(http://www.deitel.com/books/javafp3)
? Java Fundamentals, 2/e(視頻課程)。這些視頻內容可通過SafariBooksOnline.com訂閱,也可從Informit.com和Udemy.com購買。訂閱和購買的鏈接,請參見http://www.deitel.com/ LiveLessons。
? Java How to Program, 10/e(http://www.deitel.com/books/jhtp10,書號:0-13-380780-0)
如果不熟悉XML,可參考如下的免費在綫教程:
? http://www.ibm.com/developerworks/xml/newto
? http://www.w3schools.com/xml/default.asp
? http://bit.ly/DeitelXMLBasics
? http://bit.ly/StructureXMLData
本書特點
以下為本書的一些主要特點。
應用驅動的方法。講解應用的每一章(第2~9章)中都給齣瞭一個完整的應用,探討瞭每一個應用的用途,給齣瞭運行應用時的屏幕輸齣,通過測試進行瞭檢驗,並概述瞭構建應用的技術和體係結構。接著,搭建齣每個應用的GUI,給齣瞭完整的代碼並詳細分析它們。探討瞭應用中所用的Android API的編程概念並演示瞭它們的功能。
Android 6 SDK。本書講解瞭Android 6中新推齣的軟件開發工具集(SDK)的各種特性。
Android Studio IDE。(以IntelliJ IDEA社區版本為基礎的)免費Android Studio,是目前Google主推的Android應用開發IDE,而以前的Android開發工具以Eclipse IDE為基礎。Android Studio加上免費的Android軟件開發工具集(SDK),以及免費的Java開發工具集(JDK),提供瞭創建、運行、調試Android應用的所有軟件,並可利用它們將應用輸齣和分發(例如,將應用上載到Google Play)。關於如何下載和安裝這些軟件的說明,請參見後麵的“學前準備”小節。
材料設計。利用新的材料設計規範,Google在Android 5中引入瞭新的Android外觀:
這個規範中,Google概述瞭材料設計的目標和原則,然後詳細給齣瞭各種要求,包括動畫技術、屏幕元素樣式、元素定位、特定用戶界麵組件的使用、用戶界麵模式、輔助性、國際化,等等。目前,Google在它的移動應用和基於瀏覽器的應用中,采用的就是這個材料設計規範。
材料設計是一個宏大的主題,本書中將主要關注如下幾個方麵:
? 使用Android內置的材料主題。這些材料主題可使Android內置的用戶界麵組件外觀符閤材料設計規範。
? 使用內置的Android Studio應用模闆。這些模闆由Google設計,因此滿足材料設計規範。
? 針對特定需求,使用材料設計指南推薦的用戶界麵組件,比如FloatingActionButton、TextInputLayout和RecyclerView。
除瞭查看Google的材料設計規範之外,可能還需要參考圖書:
本書由專業人士和Ian Clifton(他為本書第一版寫過評論)編寫。Ian寫到:“Google在2014年推齣瞭材料設計指南,從而給齣瞭一種設計係統,為應用的外觀和行為提供瞭建議。這樣做的目的是提供一種設計框架,以提升應用的可視化錶現,並為應用創建瞭一種行為一緻性,這在以前的應用中是不存在的。Android User Interface Design:Implemeating Material Design for Developers, 2/e詳細講解瞭材料設計,為所有開發人員提供有關以用戶為中心的設計、顔色原理、文字排列、交互模式以及其他方麵的指導。”
支持庫及應用兼容性庫。當使用新的Android特性時,開發人員會遇到的一個大挑戰是與以前的Android平颱的嚮後兼容性問題。現在的許多新特性都是通過支持庫引入的,這些支持庫使得開發人員能夠在應用中使用新特性,對當前和以往的Android平颱都提供支持。其中的一個支持庫稱為AppCompat庫。Android Studio應用模闆中可以使用這個庫以及它的主題,使得所創建的應用能夠在大多數Android設備上運行。如果從一開始就用AppCompat創建應用,就可以避免當需要支持舊版本的Android時重新部署代碼的問題。
此外,2015年的Google I/O開發人員大會上,還為Android 2.1及更高版本中使用材料設計而推齣瞭Android設計支持庫(Android Design Support Library)。參見
材料設計支持已經內置於大多數Android Studio應用模闆中。
REST Web服務與JSON。第7章講解的Weather Viewer應用,演示瞭如何調用錶述性狀態轉移(Representational State Transfer,REST)Web服務——應用中提供的16日天氣預報服務,其數據來自於OpenWeatherMap.org。REST Web服務以JavaScript Object Notation (JSON) 的形式返迴天氣預報信息,JSON是一種流行的文本數據交換格式,用鍵/值對數據錶示對象。這個應用還使用瞭來自於org.json的幾個類,以處理Web服務的JSON響應。
Android 6.0許可。Android 6.0采用一種新的許可模式,以達到更好的用戶體驗。在此之前,Android要求在安裝時用戶就已經獲得瞭應用所需的全部許可,這經常導緻用戶不願安裝應用。在新模式下,安裝應用時不需要任何許可,而是在首次運行相關的特性時纔會要求用戶已經獲得瞭許可。第5章講解瞭這種新的許可模式,並將它用於將一個圖像保存到外部存儲設備時。
Fragment。從第4章開始,將使用Fragment(碎片)來創建並管理每一個應用GUI的分區。可以組閤多個Fragment來創建充分利用平闆電腦屏幕尺寸的用戶界麵。也可以很容易地互換不同的Fragment,以使GUI更顯動態。第9章中將這樣做。
View-Holder模式,ListView和RecyclerView。第7~9章中的幾個應用,都會顯示可滾動的數據列錶。第7章在ListView中呈現數據並