Android 9编程通俗演义

更多详情

内容简介: 本书严格参考Android 9官方开发文档的逻辑,全面讲解Android开发中的各种技术,章节内容循序渐进,精心安排,翔实全面,且又通俗易懂,既不是术语的罗列,也不是不知所云的翻译。
本书分为18章,内容包括配置Android 9开发环境、*个App、UI资源与Layout、各种Layout控件、代码操作控件、Activity导航、Theme、Fragment、菜单、动画、自定义控件、RecyclerView、模仿QQApp界面、实现聊天界面、多线程、网络通信、异步调用库RxJava、实现聊天功能等。
本书适合Android编程初学者、Android应用开发人员,也适合高等院校和培训学校相关专业的师生教学参考。

目录:
第1章  配置Android开发环境    1
1.1  下载Android Studio    1
1.2  安装Android Studio    2
1.3  配置Android SDK    4
1.4  四原则    6
第2章  第一个App    8
2.1  创建第一个App    8
2.2  运行App    12
2.2.1  在真实设备上调试    13
2.2.2  配置虚拟机    15
2.2.3  启动App    18
2.2.4  x86虚拟机加速    19
2.2.5  App的样子    21
2.3  工程里面有什么    22
第3章  UI资源与Layout    24
3.1  Layout    24
3.2  改动Layout    27
3.2.1  添加图像资源    30
3.2.2  显示自己的图像    32
3.2.3  XML小解    35
3.2.4  Layout源码解释    36
3.3  排版姿方法之ConstraintLayout    37
3.3.1  ConstraintLayout的原理    38
3.3.2  子控件在ConstraintLayout中居左或居右    39
3.3.3  子控件在ConstraintLayout中横向居中    40
3.3.4  子控件在ConstraintLayout中居中偏左    41
3.3.5  子控件A在子控件B的上面    42
3.3.6  子控件A与子控件B左边对齐    43
3.3.7  设置子控件的宽和高    44
3.3.8  子控件的宽和高保持一定比例    45
3.4  排版方法之RelativeLayout    48
3.4.1  把ConstraintLayout改为RelativeLayout    49
3.4.2  左右对齐与居中    51
3.4.3  充满整个父控件    52
3.4.4  兄弟之间相对排    53
3.4.5  dp是什么    55
3.4.6  使用RelativeLayout设计登录页面    56
3.5  让内容“滚”    63
3.5.1  添加ScrollView作为最外层容器    63
3.5.2  改正在ScrollView下的排版    66
3.6  添加新的Layout资源    70
第4章  各种Layout控件    72
4.1  FrameLayout    72
4.2  LinearLayout    72
4.2.1  纵向LinearLayout中子控件横向居中    74
4.2.2  子控件均匀分布    75
4.2.3  子控件按比例分布    76
4.2.4  用LinearLayout实现登录界面    77
4.3  GridLayout    79
4.4  TableLayout    80
第5章  代码操作控件    81
5.1  在Activity中创建界面    81
5.1.1  类R    82
5.1.2  Activity的父类    82
5.1.3  四大组件    82
5.2  在代码中操作控件    83
5.2.1  获取View    84
5.2.2  响应View的事件    86
5.2.3  添加依赖库    87
5.2.4  显示提示    90
第6章  Activity导航    93
6.1  创建注册页面    93
6.2  启动注册页面    94
6.3  设计注册页面    98
6.4  响应注册按钮进行注册    102
6.5  获取页面返回的数据    103
6.5.1  避免常量重复出现    105
6.5.2  日志输出    106
6.5.3  将返回的数据设置到控件中    107
6.6  Action Bar上的返回图标    109
6.6.1  原生Action Bar与MaterailDesign Action Bar    109
6.6.2  登录页面显示返回图标    111
6.6.3  注册页面显示返回图标    112
第7章  Theme    113
第8章  Fragment    115
8.1  弄巧成拙的Activity    115
8.2  使用Fragment    117
8.3  改造登录页面    120
8.3.1  添加layout文件    120
8.3.2  改变layout文件的内容    121
8.3.3  添加Fragment类    122
8.3.4  将Fragment放到Activity中    126
8.3.5  创建注册Fragment    126
8.3.6  显示RegisterFragment    128
8.3.7  通过AppBar控制页面导航    129
8.3.8  实现RegisterFragment的逻辑    129
8.3.9  LoginFragment中读出用户名和密码    131
8.3.10  Fragment的生命周期    132
8.3.11  Fragment状态保存与恢复    133
8.3.12  总结    134
8.4  对话框    138
8.4.1  创建子类    138
8.4.2  显示对话框    140
8.4.3  响应返回键    141
8.4.4  取消输入控件的焦点    142
第9章  菜单    143
9.1  添加菜单资源    144
9.2  重写onCreateOptionsMenu()    147
9.3  嵌套菜单    148
9.4  菜单项分组    150
9.5  响应菜单项    150
9.6  其他菜单类型    152
第10章  动画    153
10.1  动画原理    153
10.2  三种动画    154
10.3  View动画    155
10.3.1  绕着中心转    156
10.3.2  不要反向转    157
10.3.3  举一反三    158
10.3.4  动画组    158
10.4  属性动画    159
10.4.1  旋转动画    159
10.4.2  动画组    160
10.5  动画资源    164
10.6  Layout动画    167
10.6.1  向Layout控件添加子控件    167
10.6.2  ViewGroup    168
10.6.3  设置排版动画    169
10.7  转场动画    171
10.7.1  使用默认转场动画    171
10.7.2  自定义转场动画    172
第11章  自定义控件    176
11.1  创建一个Custom View    177
11.2  Custom View类    179
11.2.1  构造方法    179
11.2.2  onDraw()方法    180
11.2.3  init()方法    182
11.2.4  自定义属性    184
11.2.5  作画    186
11.3  创建圆形图像控件    188
11.3.1  将Drawable转成Bitmap    191
11.3.2  变换矩阵    192
11.3.3  自定义属性的改动    193
11.3.4  类的所有代码    195
第12章  RecyclerView    200
12.1  基本用法    200
12.2  显示多条简单数据    201
12.2.1  添加新页面    201
12.2.2  创建Adapter子类    203
12.2.3  设置RecyclerView    205
12.2.4  用集合保存数据    206
12.3  让子控件复杂起来    207
12.3.1  创建条目的Layout资源    208
12.3.2  应用条目Layout资源    210
12.3.3  明显区分每一行    212
12.3.4  创建音乐信息类    214
12.3.5  使用音乐信息类    215
12.4  增删改    217
12.4.1  增加一条    217
12.4.2  其他操作    219
12.5  局部刷新    219
12.6  运行效率优化    220
12.7  响应item选择    221
12.8  显示不同类型的行    223
12.8.1  添加新Item数据类    224
12.8.2  添加Item Layout    225
12.8.3  创建新的ViewHolder类    226
12.8.4  区分不同的View Type    227
第13章  模仿QQApp界面    230
13.1  创建新的Android项目    230
13.2  设计登录页面    230
13.2.1  创建登录Fragment    230
13.2.2  设计登录界面    232
13.2.3  UI代码    233
13.2.4  显示登录历史    236
13.2.5  设计历史菜单项    240
13.2.6  实现显示历史的代码    241
13.2.7  selector资源    243
13.2.8  layer_list资源    244
13.2.9  定制控件背景    245
13.2.10  动画显示菜单    246
13.2.11  让菜单消失    247
13.2.12  响应选中菜单项    248
13.3  QQ主页面设计    250
13.3.1  设置导航栏    254
13.3.2  设置Tab栏    255
13.3.3  改变Tab Item图标    258
13.3.4  为ViewPager添加内容    259
13.3.5  ViewPager与TabLayout联动    261
13.3.6  在Tab Item中显示图像    263
13.3.7  禁止ViewPager滑动翻页    266
13.3.8  创建“消息”页    267
13.3.9  显示气泡菜单    274
13.3.10  抽屉效果    293
13.3.11  创建“联系人”页    308
13.3.12  创建“动态”页    328
13.3.13  实现搜索功能    329
第14章  实现聊天界面    339
14.1  实现原理分析    339
14.2  创建聊天Activity    340
14.2.1  activity_chat.xml    340
14.2.2  类ChatActivity    342
14.2.3  显示消息的layout    344
14.3  启动ChatActivity    346
14.4  模拟聊天    347
第15章  多线程    349
15.1  线程与进程的概念    349
15.2  创建线程    350
15.3  创建线程的另一种方法    352
15.4  多个线程操作同一个对象    353
15.5  单线程中异步执行    356
15.6  多线程间同步执行    357
15.7  在其他线程中操作界面    358
15.8  HandlerThread    360
15.9  线程的退出    361
第16章  网络通信    363
16.1  网络基础知识    363
16.1.1  IP地址与域名    363
16.1.2  TCP与UDP    364
16.1.3  HTTP协议    364
16.2  Android HTTP通信    365
16.3  使用“异步任务”    369
16.3.1  定义异步任务类    369
16.3.2  使用异步任务类    370
16.3.3  完善异步任务类    371
16.3.4  异步任务的退出    378
16.4  使用OkHttp进行网络通信    380
16.4.1  使用OkHttp下载图像    381
16.4.2  创建Web服务端    383
16.4.3  使用OkHttp下载数据    385
16.4.4  JSON转对象    387
16.4.5  使用OkHttp上传文件    388
16.5  使用Retrofit进行网络通信    391
16.5.1  加入Retrofit的依赖项    391
16.5.2  用Retrofit下载文本    392
16.5.3  用Retrofit下载图像    393
16.5.4  用Retrofit上传图像    394
第17章  异步调用库RxJava    397
17.1  小试牛刀    397
17.2  精简发送代码    400
17.3  精简接收代码    401
17.4  RxJava与Lamda    402
17.5  map与flatmap    404
17.6  并行map    405
17.7  RxJava与Retrofit合体    406
17.8  RxJava Retrofit合体并行执行    407
第18章  实现聊天功能    409
18.1  改进登录功能    411
18.1.1  制定统一的数据返回结构    411
18.1.2  向ChatService中添加方法    413
18.1.3  登录请求    414
18.1.4  保存自己的信息    417
18.1.5  防止按钮重复点击    418
18.1.6  显示进度条    418
18.2  获取联系人    421
18.2.1  修改Retrofit接口    422
18.2.2  RxJava定时器    422
18.2.3  获取并显示联系人    423
18.2.4  出错重试    425
18.2.5  停止网络连接    425
18.3  发出聊天消息    427
18.3.1  定义承载消息的类    427
18.3.2  在接口中添加方法    428
18.3.3  在ChatActivity中初始化Retrofit    429
18.3.4  上传消息    429
18.3.5  失败重传    431
18.4  获取聊天消息    431
18.4.1  为ChatService增加方法    431
18.4.2  发出请求    431


前言: 前  言
自从iOS横空出世,移动应用开发持续火爆,人才需求量节节攀升,开发人员的薪资也勇攀高峰。但是,随着一批跨平台移动开发框架(如基于JavaScript的PhoneGap 、React Native,基于.Net的Xarmain等)的出现,企业对iOS与Android原生开发的需求量下降,其实大家在招聘网站上就可以感受到相关职位的减少。然而,所谓的跨平台移动开发其实是个大坑!原因很简单:没有一个操作系统愿意与其他的系统兼容、统一。比如Android与iOS,即使它们在不停地互相学习,功能越来越相似,但是它们的开发语言、SDK、API等不论在哪个层面都绝不兼容。所以当使用跨平台框架开发同时兼容iOS和Android的App时,就会踩到很多坑。更悲催的是,一旦某个操作系统升级了,你使用的框架可能马上会出现兼容性问题,你可以等待框架开发者把这个问题修正,但不知何年何月,实在等不了,你只能自己修正问题,于是你需要对这个框架的底层很熟悉,并且还要同时熟悉iOS与Android的原生开发,也就是说,你买了一个复杂的工具,你需要用它做两样不同的产品,你既需要学习如何使用这个工具,还要学习这两个产品的制作流程,还要学会修理和改进这个工具,有点恐怖啊!当然这可以煅练你的能力,让你成为牛人中的牛人,但是这会拖延开发进度,你的老板能接受吗?
最近出现了很多反思这些框架的声音,而且已经有国外公司放弃React Native的事件发生,同时我在各技术群中感受到Android和iOS开发的招聘数量比过去两年有明显的增加,这都说明大家正在回归原生开发。当然我不是在完全否定跨平台开发框架,它们有它们的适应场景,比如一个电子商城App,只提供商品展示、拍照、收藏、购物等常见功能,跨平台框架是完全能胜任的,但问题是,你依然需要熟悉原生开发,才能用好跨平台开发框架!本书讲的就是Android原生开发的故事,情节跌宕起伏,一波三折,相信你会喜欢。
作者心声
如何才能轻松学会一门开发技术? 估计这个问题很多人都思考过,因为学技术或者说研究技术真的很难!(是不是说出了大家的心声?)大家应该都有感受:真正掌握一门开发技术其实需要很长时间。即使你是一只长期浸淫各种技术的“千年老妖”,给你一门陌生的技术,你还是会感受到入门的痛苦,你虽然了解各种模式、玩过各种知识,但是你就是无法在短时间内真正参透它。
为什么会这样? 原因很简单:技术本来就是复杂的!但大家经常会听到有人说,某某开发很简单,怎样怎样做就行了,随便学学就会了……这种鬼话,谁信谁上当!因为你真正动手使用它时,发现几乎一步一个坑!实际存在这样一个规律:仅学习如何使用一门技术而不真正搞懂其原理,你是不会用这门技术的,那个说简单的人,因为他已经完全掌握了这项技术,但他忘了他入门时所花费的脑力、时间以及经受的痛苦。
我说技术本来就复杂,可能有人不服,但我相信你仔细思考之后,就会同意这个观点。一项技术可能用一句话就能说清楚它的用途或概括它的原理,但当你真正运用它时,你就会发现里面隐藏了无数的细节,而且它还依赖很多其他的技术,你要一步步跨越这些沟沟坎坎,填平你的技术洼地,才能俘获它。
但是,学习技术难,把技术用文字讲明白更难!我到现在也没读到能让我轻轻松松看明白一门技术的书。尤其对于基础差的人来说,他们喜欢凑热闹买很多“技术名著”,但最终发现能看懂的内容寥寥无几!
为什么技术书藉都那么晦涩难懂呢? 我想有三方面的主要原因:一是技术黑话(就是术语)太多;二是没有为读者补齐知识差距,作者只在自己的高度上讲啊讲,读者可能跟你隔着一层天;三是太多概括和抽象,把人整得云里雾里。
所以,我尝试改变技术书藉中的这些问题,写一本老少皆宜、童叟无欺、雅俗共赏的书,为大家讲明白一门复杂而庞大的技术:Android开发。本书对读者的知识基础也仅要求会用Java语言,希望大家读起来轻轻松松。在书中作者尽量以通俗的语言讲述各种概念,每个技术点都以具体的案例引出,尽量不劳您费神思考。本书中还配了大量的截图,就是希望读者即使不动手操作,也能学个八九不离十。
本书的定位是Android开发入门,但是其中也涉及很多高级的技术内容和热门第三方库,比如多线程、RxJava、网络通信、Retrofit、前后台结合等,所以绝不仅仅适合没有基础的人。本书也适合那些未接触Android开发的其他领域的高手们,如果他们要快速了解Android开发的方方面面,这本书绝对是非常好的选择。
本书以App实例开发驱动,带领读者一步步完成一个仿QQApp的应用,保证让读者轻松搞懂每种技术的用途,并体验到每种技术的使用模式。本书紧跟Andriod SDK的更新脚步,所有例子都可在Android 9开发环境下编译和运行。
代码下载
联系作者
作者在IT开发领域工作近20年,由于对技术的爱好,一直没有脱离开发一线。近几年转向IT教学方向,一直致力于解决教学中的痛点与难点,总结IT学习的规律,并创建“被动式IT教学法”,能在降低教师工作量的同时有效提高学生学习效果。限于作者的水平,书中难免存在疏漏之处,还望各位读者批评指正。
最后,感谢各位朋友的大力帮助,此书的顺利面世离不开各位朋友的共同努力!
著  者
2019年2月