Constraint Layout 是最受欢迎的 Jetpack 库之一。
ConstraintLayout 是一个使用 “相对定位” 灵活地确定微件的位置和大小的一个布局。它的出现是为了解决开发中过于复杂的页面层级嵌套过多的问题——层级过深会增加绘制界面需要的时间,影响用户体验,以灵活的方式定位和调整小部件。
1)创建项目
① ConstraintLayout 初识
② ConstraintLayout 实现登录页面
2)沉浸式的布局
3)富文本
4)属性动画
Navigaion 是 Android JetPack 框架中的一员,是一套新的 Fragment 管理框架。
可以帮助开发者很好的处理 fragment 之间的跳转,优雅的支持 fragment 之间的转场动画,支持通过 deeplink 直接定位到 fragment。通过第三方的插件支持 fragment 之间安全的参数传递,可以可视化的编辑各个组件之间的跳转关系。
1)搭建 Bottom Navigation Activity
2)导航界面跳转
3)Navigation 传值
4)Navigation 跳转动画
5)导航文件拆分
6)Deeplink 导航
Retrofit 是当前应用非常广泛的网络请求框架,而 Coroutines 则是 Kotlin 中用于执行异步任务的框架,比 RxJava 还要方便易用。
1)kotlin - Coroutine 协程
2)用协程和Retrofit实现网络请求
TabLayout
Tablayout 继承自 HorizontalScrollView,用作页面切换指示器,因使用简便功能强大而广泛使用在 App 中。
ViewPager2
距离 ViewPager2 正式版的发布已经一年多了,目前 ViewPager 早已停止更新,官方鼓励使用 ViewPager2 替代。ViewPager2底层基于RecyclerView实现,因此可以获得RecyclerView带来的诸多收益:
RecyclerView
RecyclerView 是一个强大又灵活的 View,可以用有限的 View 来展示大量的数据。
1)ViewPager2
2)TabLayout
3)RecyclerView
4)网络数据请求和数据填充
5)优化界面
ViewModel 一发布,便成为了 Jetpack 中的核心组件之一。
ViewModel 可以将数据层与 UI 分离,而这种架构不仅可以简化 UI 的生命周期的控制,也能让代码获得更好的可测试性。
LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。
这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。
LiveData 本身是观察者,观察组件的 Lifecycle,也是被观察者,数据变化时要通知数据的观察者。
1)MVC和MVVM介绍
2)修改歌单页面
Paging 专注于有大量数据请求的列表处理,让开发者无需关心数据的分页逻辑,将数据的获取逻辑完全与 ui 隔离,降低项目的耦合。
但 Paging 的唯一局限性是,它需要与 RecyclerView 结合使用,同时也要使用专有的 PagedListAdapter。这是因为,它会将数据统一封装成一个 PagedList 对象,而adapter 持有该对象,一切数据的更新与变动都是通过 PagedList 来触发。
1)Paging的优势
2)Paging实现分页加载更多
3)Paging和SwipRefreshLayout组合实现下拉刷新
4)给RecyclerView添加加载状态的Footer
5)发生网络错误后重试
6)帧动画
VLayout 即 VirtualLayout 是阿里开源的一个针对 RecyclerView 的库,通过自定义 LayoutManager 来提供一整套布局方案和布局间的组件复用的问题。
1)vlayout架构分析
2)vlayout布局介绍
3)基础工作准备
4)vlayout实现轮播图
5)字段内容类型不一致
Room 是 Jetpack 组件库一员,属于 ORM 库,主要是对 Sqlite 做了一层抽象,从而简化开发者对数据库操作。Room 支持编译时的语法检查,并且支持返回 LiveData。
1)添加Room依赖
2)Room详细介绍
3)DataBase创建时插入数据
4)Room实现歌单标签编辑界面的增删改查
1)新建 Entity
2)新建 Dao
3)修改 Database
4)修改 HomeViewModel
5)Migration
ExoPlayer 是谷歌开源的一个应用级的音视频播放器。ExoPlayer 支持基于 HTTP 的动态自适应流 (DASH)、SmoothStreaming 和通用加密、以及可以很好的支持播放队列、播放源的无缝切换等功能。它采用易于自定义和扩展的设计。
1)ExoPlayer 介绍
2)ExoPlayer 简单的使用方法
3)ExoPlayer 简单自定义
4)ExoPlayer 高级自定义
5)ExoPlayer 在 RecyclerView 中的复用
MotionLayout 是 ConstrainLayout 2.0 库中被引入的一个新类,帮助安卓开发者关联手势和组件动画。
MotionLayout 就像它的名字一样,首先它是一个布局,可以放置组件。其次它还是 ConstrainLayout 的子类,内置丰富的功能。创建 MotionLayout 的目的是用于降低布局过渡动画和复杂的手势处理之间的难度。
1)MotionLayout 基础
2)关键帧 Keyframes
3)代码启动动画和监听动画
4)MotionLayout 案例分析
Flow 库是在 Kotlin Coroutines 1.3.2 发布之后新增的库,也叫做异步流,类似 RxJava 的 Observable 、 Flowable 等等
1)Flow 引入的场景
2)Flow 的特性
3)Flow 的构造函数
4)Flow 中间运算函数
5)Flow 结束函数
6)Flow 的错误异常处理
7)Flow 的取消
8)StateFlow / MutableStateFlow
1)MVVM 架构中留给 Flow 的位置
2)网络数据请求
3)UI相关 - 输入框中输入关键词
4)数据库
Viewbinding 用于替代 findViewById。它会为每一个 XML layout 文件生成一个binding 类。binding 类实例包含所有拥有 id 的 View 的引用。
1)解决 findViewById 的忧伤
2)View Binding 的使用
3)从 Kotlin synthetics 迁移到 View Binding