Android 进阶 | 十四例 JetPack 知识点实战系列,千万不要错过!

一,初识 ConstraintLayout 之实现登录页面

ConstraintLayout

Constraint Layout 是最受欢迎的 Jetpack 库之一。

ConstraintLayout 是一个使用 “相对定位” 灵活地确定微件的位置和大小的一个布局。它的出现是为了解决开发中过于复杂的页面层级嵌套过多的问题——层级过深会增加绘制界面需要的时间,影响用户体验,以灵活的方式定位和调整小部件。

项目实战

1)创建项目

① ConstraintLayout 初识
② ConstraintLayout 实现登录页面

  • UI元素准备
  • Logo布局调整
  • 同意协议的TextView的布局调整
  • 四个三方登录按钮布局调整
  • 手机登录按钮布局调整

2)沉浸式的布局
3)富文本
4)属性动画

Android 进阶 | 十四例 JetPack 知识点实战系列,千万不要错过!

二、Navigation 实践之实现 APP 主框架以及 Navigation 的相关介绍

Navigaion 是 Android JetPack 框架中的一员,是一套新的 Fragment 管理框架。

可以帮助开发者很好的处理 fragment 之间的跳转,优雅的支持 fragment 之间的转场动画,支持通过 deeplink 直接定位到 fragment。通过第三方的插件支持 fragment 之间安全的参数传递,可以可视化的编辑各个组件之间的跳转关系。

项目实战

1)搭建 Bottom Navigation Activity

  • 新建 5个Fragment
  • 新建 Menu
  • 组装 BottomNavigationView
  • 创建和设置 Navigation
  • 进行 Navigation 功能装配
  • 知识点拾遗

2)导航界面跳转
3)Navigation 传值

  • 普通传值方式
  • 使用 Safe Args 传值

4)Navigation 跳转动画

  • 给 Action 设置 animation
  • 共享元素变换(Shared Element Transition)

5)导航文件拆分
6)Deeplink 导航

Android 进阶 | 十四例 JetPack 知识点实战系列,千万不要错过!

三、使用 Coroutines, Retrofit,模式实现网络数据请求

Coroutines(协程), Retrofit

Retrofit 是当前应用非常广泛的网络请求框架,而 Coroutines 则是 Kotlin 中用于执行异步任务的框架,比 RxJava 还要方便易用。

项目实战

1)kotlin - Coroutine 协程

  • 启动协程
  • 协程中的异步操作 --- suspend函数
  • 协程中的异常处理机制
  • 协程总结

2)用协程和Retrofit实现网络请求

Android 进阶 | 十四例 JetPack 知识点实战系列,千万不要错过!

四、使用 TabLayout,ViewPager2 ,RecyclerView实现实现歌单广场页面

TabLayout,ViewPager2 ,RecyclerView

TabLayout
Tablayout 继承自 HorizontalScrollView,用作页面切换指示器,因使用简便功能强大而广泛使用在 App 中。

ViewPager2
距离 ViewPager2 正式版的发布已经一年多了,目前 ViewPager 早已停止更新,官方鼓励使用 ViewPager2 替代。ViewPager2底层基于RecyclerView实现,因此可以获得RecyclerView带来的诸多收益:

  • 抛弃传统的PagerAdapter,统一了Adapter的API。
  • 通过LinearLayoutManager可以实现类似抖音的纵向滑动。
  • 支持DiffUtil,可以实现局部刷新。
  • 支持RTL(right-to-left),对于一些有出海需求的APP非常有用。
  • 支持ItemDecorator。

RecyclerView
RecyclerView 是一个强大又灵活的 View,可以用有限的 View 来展示大量的数据。

项目实战

1)ViewPager2

  • 添加ViewPager2
  • ViewPager2设置Adapter
  • 监听ViewPager2的滚动

2)TabLayout
3)RecyclerView

  • 添加 RecyclerView
  • 给 RecyclerView 添加网格布局管理器
  • 创建 RecyclerView.Adapter
  • 将 Adapter 赋值给 RecyclerView

4)网络数据请求和数据填充
5)优化界面

  • 将图片设置成有5dp的圆角
  • 几个界面的请求地址不同

Android 进阶 | 十四例 JetPack 知识点实战系列,千万不要错过!

五、歌单页面 MVVM 架构改造及其 ViewModel 和 LiveData 的使用介绍

ViewModel,LiveData
  • ViewModel

ViewModel 一发布,便成为了 Jetpack 中的核心组件之一。

ViewModel 可以将数据层与 UI 分离,而这种架构不仅可以简化 UI 的生命周期的控制,也能让代码获得更好的可测试性。

  • LiveData

LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。

这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。

LiveData 本身是观察者,观察组件的 Lifecycle,也是被观察者,数据变化时要通知数据的观察者。

项目实战

1)MVC和MVVM介绍

  • MVC
  • MVVM

2)修改歌单页面

  • 遗留问题1 - DiffUtil.ItemCallback怎么使用
  • 遗留问题2 - 为什么先判断LiveData的value存不存在?

Android 进阶 | 十四例 JetPack 知识点实战系列,千万不要错过!

六、Paging 实现加载更多和下拉刷新,错误后重新请求

Paging

Paging 专注于有大量数据请求的列表处理,让开发者无需关心数据的分页逻辑,将数据的获取逻辑完全与 ui 隔离,降低项目的耦合。

但 Paging 的唯一局限性是,它需要与 RecyclerView 结合使用,同时也要使用专有的 PagedListAdapter。这是因为,它会将数据统一封装成一个 PagedList 对象,而adapter 持有该对象,一切数据的更新与变动都是通过 PagedList 来触发。

项目实战

1)Paging的优势
2)Paging实现分页加载更多
3)Paging和SwipRefreshLayout组合实现下拉刷新
4)给RecyclerView添加加载状态的Footer

  • 先定义一个是否显示Footer的变量并且添加覆写两个方法:
  • 修改两个覆写方法
  • 遗留问题

5)发生网络错误后重试
6)帧动画

Android 进阶 | 十四例 JetPack 知识点实战系列,千万不要错过!

七、vlayout 嵌套横向 RecyclerView 和 Banner 实现主页的展示,自定义 Moshi 的 JsonAdapter

VLayout

VLayout 即 VirtualLayout 是阿里开源的一个针对 RecyclerView 的库,通过自定义 LayoutManager 来提供一整套布局方案和布局间的组件复用的问题。

项目实战

1)vlayout架构分析
2)vlayout布局介绍
3)基础工作准备
4)vlayout实现轮播图
5)字段内容类型不一致

Android 进阶 | 十四例 JetPack 知识点实战系列,千万不要错过!

八、Room 数据库实现增删改查和事务处理

Room

Room 是 Jetpack 组件库一员,属于 ORM 库,主要是对 Sqlite 做了一层抽象,从而简化开发者对数据库操作。Room 支持编译时的语法检查,并且支持返回 LiveData。

项目实战

1)添加Room依赖
2)Room详细介绍

  • Entity (实体)
  • Dao (数据访问对象)
  • Database (数据库)
  • Repository (仓库)

3)DataBase创建时插入数据
4)Room实现歌单标签编辑界面的增删改查

Android 进阶 | 十四例 JetPack 知识点实战系列,千万不要错过!

九、Room 数据库 Migration

1)新建 Entity
2)新建 Dao
3)修改 Database
4)修改 HomeViewModel
5)Migration

Android 进阶 | 十四例 JetPack 知识点实战系列,千万不要错过!

十、ExoPlayer 进行视频播放的实现

ExoPlayer

ExoPlayer 是谷歌开源的一个应用级的音视频播放器。ExoPlayer 支持基于 HTTP 的动态自适应流 (DASH)、SmoothStreaming 和通用加密、以及可以很好的支持播放队列、播放源的无缝切换等功能。它采用易于自定义和扩展的设计。

项目实战

1)ExoPlayer 介绍
2)ExoPlayer 简单的使用方法
3)ExoPlayer 简单自定义
4)ExoPlayer 高级自定义
5)ExoPlayer 在 RecyclerView 中的复用

Android 进阶 | 十四例 JetPack 知识点实战系列,千万不要错过!

十一、MotionLayout 让动画如此简单

MotionLayout

MotionLayout 是 ConstrainLayout 2.0 库中被引入的一个新类,帮助安卓开发者关联手势和组件动画。

MotionLayout 就像它的名字一样,首先它是一个布局,可以放置组件。其次它还是 ConstrainLayout 的子类,内置丰富的功能。创建 MotionLayout 的目的是用于降低布局过渡动画和复杂的手势处理之间的难度。

项目实战

1)MotionLayout 基础

  • 让动画跑起来
  • MotionScene 介绍
  • OnClick 设置
  • 弧形运动 Arc Motion
  • 多个 ConstraintLayout 属性同时动画
  • 自定义属性
  • MotionLayout 的一些开发属性
  • 图片变换

2)关键帧 Keyframes

  • 位置关键帧 Position Keyframes
  • 属性关键帧 Attribute Keyframes
  • 关键触发关键帧 KeyTrigger Keyframes

3)代码启动动画和监听动画
4)MotionLayout 案例分析

  • 案例1:点赞和取消点赞
  • 案例2:循环旋转和文字切换

Android 进阶 | 十四例 JetPack 知识点实战系列,千万不要错过!

十二、Kotlin Flow基础知识详解

Kotlin Flow

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

Android 进阶 | 十四例 JetPack 知识点实战系列,千万不要错过!

十三、Kotlin Flow项目实战-网络、数据库和UI的应用

1)MVVM 架构中留给 Flow 的位置
2)网络数据请求

  • Retrofit API
  • Repository
  • ViewModel
  • Fragment

3)UI相关 - 输入框中输入关键词

  • EditText 的 Event 转为 Flow
  • Flow 值触发网络请求和 UI 刷新

4)数据库

  • DataBase Migration
  • Dao
  • ViewModel
  • Fragment

Android 进阶 | 十四例 JetPack 知识点实战系列,千万不要错过!

十四、View Binding 替代 ButterKnife 和 Kotlin synthetics

View Binding

Viewbinding 用于替代 findViewById。它会为每一个 XML layout 文件生成一个binding 类。binding 类实例包含所有拥有 id 的 View 的引用。

项目实战

1)解决 findViewById 的忧伤
2)View Binding 的使用

  • 启动 View Binding
  • View Binding 在 Activity 中的使用
  • View Binding 在 Fragment 中的使用
  • View Binding 在 Adapter 中的使用

3)从 Kotlin synthetics 迁移到 View Binding

  • 更新 Gradle 文件
  • 更新 Activity, Fragment,和Adapter文件

Android 进阶 | 十四例 JetPack 知识点实战系列,千万不要错过!

Android资料免费获取直通车

上一篇:上海理工大学联想杯 4题滚粗记


下一篇:P2762 太空飞行计划问题