这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战
前言:实践系列导读
实践系列是与基础系列都是讲述 Android 开发相关知识的,区别在于基础系列从知识点出发,主要介绍知识点内容和相关的应用,是一个个独立的「点」,而实践系列是从需求出发,逐步讲述如何实现,过程中会涉及到很多个知识点,相当于是基础系列的补充。
由于实践系列代码量比较大,没办法仔细展开每个细节,遇到疑问可以到 Github 查看完成项目代码,也可直接评论提问。
需求描述:仿写掘金 App 首页
本次实践内容是仿写掘金 App 首页,只用假数据模仿 UI 效果,毕竟掘金也没有开发 API 能用。
想必各位都很熟悉掘金首页是什么样子,我录了一个 gif 但效果不太好,只放一下截图吧。
需求拆分
从层次结构上看,页面中的底部导航是固定的,通过点击底部导航切换主要内容,所以 Activity 中只需要底部导航和一个容器,容器内的 View 要随着用户操作动态创建。
动态创建 View 并不是要通过 Kotlin 代码直接创建 View 对象,Android API 提供了一种给 View 以生命周期并可绑定 Activity 进行管理的类,叫做 Fragment。
五个子页面通过 Fragment 实现,首页、沸点和发现页面内容比较复杂,应该需要封装一下 RecyclerView 减少样板代码,交互效果也得稍微调一下细节。首页和发现的内容有些相似,列表的 ViewHolder 可以复用。小册和我这两个页面都是比较单调的列表,实现难度不高。
最终分为 5 部分:
- 添加基本依赖和底部导航的搭建
- RecyclerView简单封装,实现「小册」和「我」页面
- 实现「首页」
- 实现「发现」
- 实现「沸点」
1. 底部导航的搭建
添加依赖是指修改 build.gradle 添加一些需要使用的第三方库,具体用到的库咱们以后从基础系列写。
掘金的底部导航是 Material Design 风格的,可以直接用 design
库的 BottomNavigationView 实现。
Material Design 是 Google 的一种设计风格,Android API 提供了很多 Material Design 风格的 View 给开发者使用,遵循 Material Design 规范可以大幅降低开发成本、统一手机上的 App 风格。但国内的设计主流偏 iOS 风格,Material Design 不算常用。
布局上使用了 ConstraintLayout,内容只有 BottomNavigationView 和一个空的 FrameLayout。
BottomNavigationView 的内容通过 menu 配置,menu 是 res 下的一种分类(对应 res/menu/ 文件夹),因为不是特别常用默认的工程模板不会创建对应文件夹,需要使用时自己创建。
设置好 menu 之后就能再预览面板看到导航内容了,其他样式调整也基本都能预览到效果,不得不说还是官方给的 View 支持更完善。然后还得加代码设置一下点击切换 FrameLayout 里的内容。
Fragment 的基本使用就是通过 add 或者 replace 将自身的 View 添加到整个 View 树中,这里我们暂时选择 replace 看看效果。
效果展示:
结
实践刚一开始就明显感觉基础内容还是写得太少了,一上代码都是前面没提到过的,学习和实践本身就有一定的差别,单纯的学习难以融会贯通,单纯的实践则难以形成完整的知识体系,二者交替才能真正学会知识。
祝各位周末快乐!