新書推薦:

《
暗斗:一个书生的文化抗战
》
售價:HK$
96.8

《
西周人的日常生活:中国贵族的蜕变之旅 西周人的一天 九鼎八簋的隐藏菜单
》
售價:HK$
107.8

《
近代中国政府与政治
》
售價:HK$
118.8

《
索恩丛书·蛮族之王:狄奥多里克与罗马帝国的黄昏
》
售價:HK$
174.9

《
世界银行营商环境成熟度方法论手册 2025年修订版 官方指导手册
》
售價:HK$
327.8

《
人形机器人:产业变革商业机遇与未来趋势
》
售價:HK$
96.8

《
没有人能让我不快乐
》
售價:HK$
46.2

《
汉匈战争三百年
》
售價:HK$
97.9
|
編輯推薦: |
本书设计了六个案例,通过这些精心设计的应用,读者可掌握很多重要的理论知识和开发技巧,获得宝贵的开发经验。全书以循序渐进的方式精心编排章节,一步一步写出Android应用。
|
內容簡介: |
本书为英文版Android Programming(第5版)的中文翻译教材。英文版由美国4位在专业培训机构任职的教师编著,他们以Android训练营教学课程为基础,融合多年教学心得编写而成。该书采用Kotlin编程,以6个Android APP应用案例贯穿全部知识点,是一本面向实战的 Android 编程权威指南。中文版依据中国读者的学习习惯,结合译者多年移动应用开发课程的教学经验和同类教材的编写经验翻译而成,便于中国读者阅读、学习和使用。全书共30 章,以6个案例的功能迭代展开。GeoQuiz案例覆盖本书的第1章-第8章,主要用于学习Android应用的基本组成、activity、界面布局以及显式intent。学习者还将学习如何无缝处理配置更改。CriminalIntent案例覆盖本书的第9章-第19章,主要用于学习fragment、list-backed用户界面、数据库、菜单、相机调用、隐式intents等内容。
來源:香港大書城megBookStore,http://www.megbook.com.hk PhotoGallery案例覆盖本书的第20章-第23章,主要用于学习后台任务调度、多线程、访问web服务等知识。DragAndDraw案例覆盖本书的第24章,主要用于学习如何处理触摸手势事件以及如何创建个性化视图。Sunset案例覆盖本书的第25章,主要用于学习Android动画。Coda Pizza案例覆盖本书的第26章-第29章,主要用于学习Android UI创建的最新方法Jetpack Compose,如何利用Jetpack Compose管理应用程序状态,以及如何使用声明性框架来描述UI的自我呈现。第30章为本书的总结。教材每章后面配有习题,部分章末还配有“挑战练习”和“深入学习”,用于锻炼读者独立解决问题的能力。书中代码全部在Android Studio平台基于Android 12调试通过。本书可为作为普通高校计算机、软件工程、物联网、电信和自动化等专业学生学习Android移动开发的参考教材,也可以作为移动开发从业人员学习基于Kotlin开发Android APP的指导图书。
|
關於作者: |
布莱恩斯?西尔斯(Bryan Sills),Big Nerd Ranch 解决方案架构师和讲师,专注于 Android 开发和 Kotlin 编程,主讲 Android 基础、Kotlin 基础、高级 Kotlin 和移动测试等课程,是《Android Programming》(第5版)的主要作者。
布赖恩?加德纳(Brian Gardner),Big Nerd Ranch讲师、 Android开发工程师。对最新的Android库有深入研究。
克莉丝汀?马西卡诺(Kristin Marsicano),Big Nerd Ranch高级工程经理、讲师、Android开发工程师。
克里斯?斯图尔特(Chris Stewart),Big Nerd Ranch副总裁,Android开发训练营讲师。
|
目錄:
|
第1章Android开发初体验
1.1Android开发基础
1.2创建Android项目
1.3Android Studio使用导航
1.4用户界面设计
1.4.1视图层级结构
1.4.2视图属性
1.4.3创建字符串资源
1.4.4预览布局
1.5从布局XML到视图对象
1.5.1布局与视图
1.5.2资源与资源ID
1.6关联视图
1.6.1引用部件
1.6.2设置监听器
1.7创建toast提示消息
1.8在模拟器上运行应用
1.9深入学习: Android编译过程
1.9.1Android编译过程概述
1.9.2Android编译工具
1.10关于挑战练习
1.11挑战练习: 定制toast消息
第2章交互式用户界面
2.1创建新类
2.2更新布局
2.3组织用户界面
2.4添加图标
2.4.1Android图形资源
2.4.2在XML文件中引用资源
2.5屏幕像素密度
2.6在物理设备上运行应用
2.7挑战练习: 为TextView添加监听器
2.8挑战练习: 添加后退按钮
第3章activity生命周期
3.1旋转GeoQuiz应用
3.2activity状态与生命周期回调函数
3.3日志跟踪activity生命周期
3.3.1生成日志信息
3.3.2使用Logcat
3.4activity生命周期如何响应用户操作
3.4.1暂时离开activity
3.4.2结束使用activity
3.4.3旋转activity
3.5设备配置改变与activity生命周期
3.6深入学习: 创建横屏模式布局
3.7深入学习: UI刷新与多窗口模式
3.8深入学习: 日志记录的级别
3.9挑战练习: 禁止重复答题
3.10挑战练习: 答题评分
第4章存储UI状态
4.1引入ViewModel依赖
4.2添加ViewModel
4.2.1ViewModel生命周期
4.2.2向ViewModel添加数据
4.3进程销毁时保存数据
4.4深入学习: Jetpack AndroidX与架构组件
4.5深入学习: 解决问题要彻底
4.6深入学习: Activity与实例状态
第5章Android应用的调试
5.1异常与栈跟踪
5.1.1诊断异常
5.1.2记录栈跟踪日志
5.1.3设置断点
5.2Android特有的调试工具
5.2.1使用Android Lint
5.2.2编译问题
5.3挑战练习: 使用条件断点
5.4挑战练习: 探索布局检查器
5.5挑战练习: 探索Android性能分析器
第6章Android应用的测试
6.1两种测试方法
6.2JVM 测试
6.3Espresso和ActivityScenario工具测试
6.4挑战: 自信
第7章第二个activity
7.1创建第二个activity
7.1.1创建新的activity
7.1.2创建新的Activity子类
7.1.3在manifest配置文件中声明activity
7.1.4为MainActivity添加CHEAT!按钮
7.2启动activity
7.2.1基于Intent的通信
7.2.2显式Intent与隐式Intent
7.3activity间的数据传递
7.3.1使用intent extra
7.3.2从子activity获取返回结果
7.4Android如何看待activity
7.5深入学习: 关于startActivityForResult
7.6深入学习: Back按钮与activity生命周期
7.7挑战练习: 堵住作弊漏洞
7.8挑战练习: 按题目跟踪作弊状态
第8章Android SDK版本与兼容
8.1Android SDK版本
8.1.1合理的最小版本
8.1.2SDK最低版本
8.1.3SDK目标版本
8.1.4SDK编译版本
8.2Android编程与兼容性问题
8.2.1Jetpack库
8.2.2使用新版本API后安全添加代码
8.3使用Android开发者文档
8.4挑战: 报告设备的Android版本
8.5挑战练习: 限制作弊次数
第9章Fragment
9.1UI设计的灵活性需求
9.2了解Fragment
9.3着手开发CriminalIntent
9.3.1项目要求
9.3.2创建新项目
9.4创建Crime数据类
9.5创建Fragment
9.5.1定义CrimeDetailFragment布局
9.5.2创建CrimeDetailFragment类
9.6托管Fragment
9.6.1定义FragmentContainerView
9.6.2FragmentManager
9.6.3Fragment生命周期
9.6.4Fragment与内存管理
9.7挑战练习: 用FragmentScenario来测试
第10章使用RecyclerView显示列表
10.1添加新Fragment和ViewModel
10.1.1ViewModel添加与Gradle同步
10.1.2ViewModel生命周期与Fragment
10.2添加RecyclerView
10.3LayoutManager实现
10.4创建列表项视图布局
10.5ViewHolder实现
10.6Adapter实现填充RecyclerView
10.6.1创建Adapter
10.6.2为RecyclerView配置Adapter
10.7循环使用视图
10.8清理列表项绑定
10.9响应单击
10.10Lists and Grids: 过去 现在和未来
10.11深入学习: 带ListAdapter的智能Adapter
10.12挑战练习: RecyclerView视图类型
第11章使用布局和视图创建用户界面
11.1ConstraintLayout简介
11.2布局编辑器简介
11.3使用ConstraintLayout
11.3.1视图尺寸设置
11.3.2添加视图
11.3.3约束的工作原理
11.3.4编辑属性
11.3.5动态设置列表项
11.4样式 主题和主题属性
11.5深入学习: 边距与内边距
11.6深入学习: ConstraintLayout高级功能
11.7挑战练习: 日期格式化
第12章协程与数据库
12.1Android异步代码简介
12.1.1使用协程
12.1.2协程中的数据使用
12.2创建数据库
12.2.1Room架构组件库
12.2.2定义实体
12.2.3创建数据库类
12.2.4创建类型转换器
12.2.5定义数据库访问对象
12.3使用仓库模式访问数据库
12.4导入预填充数据
12.5查询数据库
12.6储存数据流的变化
12.7挑战练习: 解决schema警告
12.8深入学习: 单例singleton
第13章Fragment Navigation
13.1执行Navigation
13.1.1Navigation组件库实现
13.1.2导航到详细信息屏幕
13.1.3向Fragment传送数据
13.2单向数据流
13.3更新数据库
13.4深入学习: 更好用的列表预览
13.5挑战练习: 无标题Crime的处理
第14章对话框和DialogFragment
14.1创建DialogFragment
14.1.1DialogFragment简介
14.1.2显示DialogFragment
14.2Fragment间的数据传递
14.2.1传递数据给DatePickerFragment
14.2.2返回数据给CrimeDetailFragment
14.2.3设置Fragment结果
14.3挑战练习: 更多对话框
第15章应用栏
15.1默认应用栏
15.2应用栏菜单
15.2.1在XML文件中定义菜单
15.2.2创建菜单
15.2.3响应菜单项选择
15.3深入学习: 应用栏 操作栏和工具栏
15.4深入学习: 访问AppCompat应用栏
15.5挑战练习: RecyclerView空视图
15.6挑战练习: 删除Crime
第16章隐式Intent
16.1添加按钮
16.2添加suspect属性
16.3使用格式化字符串
16.4使用隐式Intent
16.4.1隐式Intent的组成
16.4.2发送Crime报告
16.4.3获取联系人信息
16.4.4检查可响应任务的activity
16.5挑战练习: 第二个隐式Intent
第17章使用Intent拍照
17.1布置照片
17.2文件存储
17.2.1使用FileProvider
17.2.2指定图片位置
17.3使用相机Intent
17.4缩放和显示位图
17.5功能声明
17.6挑战练习: 优化照片显示
第18章应用本地化
18.1资源本地化
18.1.1默认资源
18.1.2使用翻译编辑器检查资源本地化
18.1.3区域限定符
18.2配置限定符
18.2.1备选资源优先级
18.2.2多重配置限定符
18.2.3寻找最匹配的资源
18.3测试备选资源
18.4深入学习: 确定设备尺寸
18.5挑战练习: 日期显示本地化
第19章易用性与辅助功能
19.1TalkBack
19.1.1触摸浏览
19.1.2线性导航
19.2通过TalkBack使非文本元素可读
19.2.1添加内容描述
19.2.2实现视图可聚焦
19.3提升辅助体验
19.4深入学习: 在模拟器中使用TalkBack
19.5深入学习: 使用辅助功能扫描器
19.6挑战练习: 优化列表项
19.7挑战练习: 补全上下文信息
19.8挑战练习: 事件通知
第20章网络请求与图像显示
20.1创建PhotoGallery应用
20.2Retrofit网络基础
20.2.1定义Retrofit API接口
20.2.2构建Retrofit对象并创建API实例
20.2.3执行网络请求
20.2.4请求网络权限
20.2.5使用仓库模式
20.3从Flickr获取JSON数据
20.3.1将JSON文本反序列化为模型对象
20.3.2出错处理
20.4跨配置更改建立网络
20.5在RecyclerView中显示结果
20.5.1RecyclerView配置
20.5.2显示图像
20.6深入学习: 管理依赖项
20.7挑战练习: 分页
第21章搜索与数据存储
21.1搜索Flickr网站
21.2使用SearchView
21.2.1SearchView定义
21.2.2响应用户搜索
21.3用DataStore实现轻量级数据存储
21.4定义UI状态
21.5挑战练习: 进一步完善应用
第22章WorkManager
22.1创建Worker类
22.2Worker调度
22.3检查新图片
22.4通知用户
22.5轮询服务的用户控制
第23章网页浏览与WebView
23.1最后一段Flickr数据
23.2简单方式: 使用隐式Intent
23.3较难方式: 使用WebView
23.3.1使用WebView类显示UI
23.3.2使用WebChromeClient优化WebView
23.4WebView与定制UI
23.5深入学习: WebView升级
23.6深入学习: Chrome Custom Tabs
23.7挑战练习: 使用Back按钮浏览历史网页
第24章定制视图与触摸事件
24.1创建DragAndDraw项目
24.2创建自定义视图
24.3处理触摸事件
24.3.1监听触摸事件
24.3.2跟踪运动事件
24.4onDraw(Canvas)函数内的图形绘制
24.5深入学习: 检测手势
24.6挑战练习: 保存状态
24.7挑战练习: 旋转方框
24.8挑战练习: 辅助功能支持
第25章属性动画
25.1创建场景
25.2简单属性动画
25.2.1视图转换属性
25.2.2使用不同的interpolator
25.2.3色彩渐变
25.3播放多个动画
25.4深入学习: 其他动画API
25.4.1传统动画工具
25.4.2过渡框架
25.5挑战练习
第26章Jetpack Compose简介
26.1创建Compose项目
26.2编写第一个Compose UI
26.3Compose布局
26.4Composable函数
26.5Composable预览
26.6定制Composable
26.6.1声明Composable函数的输入
26.6.2对齐一行中的元素
26.6.3指定文本样式
26.7Compose Modifier
26.7.1padding Modifier
26.7.2链接Modifier与Modifier排序
26.7.3clickable Modifier
26.7.4调整Composable的大小
26.7.5指定Modifier参数
26.8用Composable构建屏幕
26.9用LazyColumn实现滚动列表
26.10深入学习: live literals
第27章Jetpack Compose中UI的状态
27.1UI状态的原理
27.2定义UI状态
27.3用MutableState更新UI
27.4Recomposition重组
27.5remember()函数
27.6状态提升
27.7状态与配置变化
27.8深入学习: Coroutines,Flow与 Compose
27.9深入学习: 滚动状态
27.10深入学习: Compose布局检查
第28章使用Jetpack Compose显示对话框
28.1Compose中的第一个对话框
28.2关闭对话框
28.3设置对话框内容
28.4从对话框发回结果
28.5挑战练习: 披萨的大小和下拉菜单
第29章Compose UI主题
29.1图像
29.1.1图像contentDescription
29.1.2添加更多图像
29.1.3定制Image composable
29.1.4添加LazyColumn标头
29.2MaterialTheme主题
29.3Scaffold和TopAppBar
29.4CompositionLocal
29.5删除AppCompat
29.6深入学习: Accompanist
29.7深入学习: 创建自己的Composition
29.8挑战练习: Animation
|
內容試閱:
|
对于新手来说,一开始学习Android开发会感觉很难。就像初次踏入异国他乡一样,即使会说当地语言,一开始也绝不会有舒服自在的感觉。学习者不能理解周围人习以为常的东西,其原有的知识储备在新环境下也完全派不上用场。
Android有自己使用的编程语言——Kotlin或Java语言(或者两者兼而有之)。但要深入理解Android,仅掌握Kotlin或Java还不够,学习者还需要学习诸多新理论和新技术。涉足陌生领域时,有个向导会很有帮助,这就是本书的作用所在。
在Big Nerd Ranch,要成为一名Android开发人员,学习者必须:
充分理解Android应用;
着手开发一些Android应用。
本书将协助学习者完成以上两件事,将指导学习者开发多个Android应用,并根据需要介绍各种概念和技术。我们会尽最大努力抽丝剥茧,让学习者知其然更知其所以然。在学习过程中,如果遇到知识疑难点,请勇敢面对。
本书秉承的教学方法是: 在学习理论的同时就着手运用它们开发实际应用,而非先学习一大堆理论,再考虑如何将其应用于实践。读完本书,学习者将具备必要的开发经验和知识。以此为起点,深入学习,学习者会逐渐成长为一名合格的Android开发者。
阅读前提
使用本书的一个重要前提是学习者熟悉Kotlin语言,包括类、对象、接口、监听器、包、内部类、对象表达式以及泛型类等基本概念。如果不熟悉这些概念,可能没翻几页就会看不下去本书了。对此,建议先放下本书,找本Kotlin入门书看一看。市面上有很多优秀的Kotlin入门书,学习者可以基于自己的编程经验及学习风格去挑选。
如果学习者熟悉面向对象编程,但Kotlin知识掌握得不牢靠,那么阅读本书不会有太大问题。碰到Kotlin知识点,本书会给出简要说明。不过,在学习的过程中还是建议手边准备一本Kotlin参考书,以便查阅。
第5版有哪些变化
本书第5版于2019年10月发布,较之前版本有很多改变。
从2019年开始,响应式编程作为一种将Android代码构建成可维护和可扩展的结构的编程方法越来越受到欢迎。2021年,随着Jetpack Compose的发布,Google公司又加了把火,推进了响应式编程的进程。响应式编程和Jetpack Compose的声明框架无缝结合,为构建现代Android应用程序奠定了良好的基础。
Jetpack Compose是Android开发的未来,第5版就是为读者应对将来的编程而准备的。除向读者介绍Jetpack Compose的4个新章节外,第5版简化了从使用Android现有UI工具包开发应用程序到使用Jetpack Compose开发应用程序的过渡。例如,有很多方法可以在Android上编写异步代码,但第5版专门使用Kotlin协程实现异步操作。作为一款优秀的交互式UI工具,协程是用Android现有UI工具包编写的,它能够直接嵌入Jetpack Compose的API中。同时,书中还遵循单向数据流架构模式重新设计了许多项目。单向数据流模式对于使用Jetpack Compose构建应用程序至关重要,在使用Android现有的UI工具包构建应用程序时,也有助于组织代码。
第5版的另外一些变化是建立在Jetpack Compose之上的。例如,测试是构建现代Android应用程序不可或缺的一部分,我们用实际例子从头开始重写了测试内容。此外,为了反映现代Android应用程序是如何开发的,第5版更加依赖Google公司和第三方的库。第5版中的应用程序使用导航组件库管理屏幕和库之间的导航,如Retrofit库、Moshi库、Coil库和Jetpack库,以处理其他核心功能。作为Android开发人员,每天都在使用这些库。
对于本版的第2次印刷作如下说明。我们在第9章中改正了一些拼写错误,包括用于FragmentLayout的inflate()方法的变量名称。此外,在第17章中,我们将传递给17.12节中createIntent()函数的一个参数从null更改为emptyUri。传递null适用于某些版本的Jetpack库,但在技术上是不正确的,并且会导致较新版本的库崩溃。createIntent()函数需要一些非null输入,即使该输入没有用于任何功能。
Kotlin与Java
在2017年的Google I/O全球开发者大会上Kotlin获得了Android开发的官方支持。在那之前,一直是民间Android开发者力量在推动使用Kotlin。自2017年官宣后,Kotlin逐渐被人们广泛接受, 并迅速成为大多数开发者进行Android开发的首选语言。在Big Nerd Ranch,所有的应用开发项目都采用Kotlin,即使是过去那些大量使用Java的遗留项目。
随着Google官宣,Kotlin已经成为现代Android开发工具箱中最基本的工具。除与现有平台兼容外,Android平台上现在还有一些工具和功能只能与Kotlin一起使用(包括Jetpack Compose),所以无法在Jetpack Compose中使用Java编写应用程序。
Android框架最初是用Java编写的,这意味着大多数与Android交互的类都是Java。而Kotlin可以与Java互操作,所以学习者应该不会遇到太大问题。
尽管学习者仍然可以用Java编写应用程序,但Android平台的未来取决于Kotlin。Google和整个Android开发者生态系统都在大力投资,使Kotlin的开发在Android上更容易、更有用。
如何使用本书
本书不是一本参考书。这本书的目标是帮学习者跨越学习的初始障碍,进而充分利用其他参考资料和实例类图书来深入学习。本书基于Big Nerd Ranch培训机构的5天教学课程编写而成,从基础知识讲起,各章内容循序渐进,所以建议读者不要跳读,以免学习效果大打折扣。
以下建议也许很有帮助: 和朋友或同事组成学习小组; 集中安排时间逐章学习; 参与本书论坛的交流和讨论; 向Android开发高手寻求帮助。
本书内容
本书会带领学习者学习开发6个Android应用。有些应用很简单,1个章节即可讲完,有些则相对复杂。最复杂的一个应用跨越了11章。通过这些精心编排的应用,学习者能学到很多重要的理论知识和开发技巧,并获得最直接的开发经验。
(1) GeoQuiz是本书中的第一个应用,用来学习Android应用的基本组成、activity、界面布局和显式Intent。学习者还将学习如何无缝处理配置更改。
(2) CriminalIntent是本书最复杂的应用,用来学习Fragment、listbacked用户界面、数据库、菜单、相机调用、隐式intent等内容。
(3) PhotoGallery是一个从Flickr公共订阅网站下载并用于显示照片的客户端应用,用来学习后台任务调度、多线程、访问Web服务等知识。
(4) DragAndDraw是一个简单的画图应用,用来学习如何处理触摸手势事件,以及如何创建个性化视图。
(5) Sunset是一个漂亮的日落动画应用,在开阔的水面上创建一个美丽的日落动画,用来学习Android动画。
(6) Coda Pizza主要用于讲解Jetpack Compose,Jetpack Compose是创建Android UI的最新方法。学习者将学习如何管理应用程序状态,以及如何使用声明性框架来描述UI的自我呈现。
挑战练习
本书大部分章末均配有练习题,学习者可借此机会检验所学,查阅文档,锻炼独立解决问题的能力。强烈建议学习者完成这些挑战练习。在练习过程中不妨尝试另辟蹊径,这有助于学习者巩固所学知识,增强未来开发应用的信心。
深入学习
本书部分章末还包含“深入学习”的章节。该节对本章内容进行了深入讲解或提供了更多信息,此部分内容不属于必须掌握的部分,但希望学习者有兴趣阅读并有所收获。
版式说明
所有代码与XML清单会以固定宽度字体显示。需要输入的代码或XML总是以粗体显示。应该删除的代码或XML会打上删除线。例如,在以下代码里,删除了Toast.makeText().show()方法的调用,增加了checkAnswer(true)函数的调用。
trueButton.setOnClickListener { view: View-
Toast.makeText(
this,
R.string.correct_toast,
Toast.LENGTH_SHORT
)
.show()
checkAnswer(true)
}
Android版本
本书面向撰写本书时广泛使用的各个系统版本。就本书第5版来说,就是从Android 7.0 Nougat(N,API level 24)到Android 12L(Sv2,API level 32)。话虽如此,由于Google公司在为Android提供向后兼容的解决方案方面投入了大量资金,本书中的大部分代码仍然可以在旧版本的Android上运行,例如可以支持像Android 5.0 Lollipop (L,API level 21)一样旧的版本。
虽然旧版本的Android仍有人在用,但对于许多开发人员来说,为支持这些旧版本而付出努力将得不偿失。第8章介绍了Android的相关版本以及如何选择正确的版本。
Android和Android Studio的新版本会不断发布,学习者在本书中学到的技术不会过时,感谢Android的向后兼容性支持。我们将持续跟踪Android开发新动向,及时为学习者提供本书与最新Android版本的相关说明和指导。我们也可能在以后的印刷中对本书做一些小的修改,例如更新屏幕截图或按钮名称。
|
|