【Android】高级Jetpack架构组件+Jetpack compose强化实战

Jetpack 是一个开发组件工具集,Jetpack Compose 则是一个用于构建原生 Android 界面的新工具包。

与安卓传统xml布局相比,Jetpack compose 可以让你用更少的代码实现更多的功能;可以用声明性API直观地完成之前需要在多个 XML 文件中完成地任务;可以与现有的所有代码兼容,适用于大多数常用库;可以凭借对 Android 平台 API 的直接访问和对于 Material Design、深色主题、动画等的内置支持,创建精美的应用…

Jetpack compose 的原理比较复杂,我个人在入门前也是把Google官网和Youtube上的资料盘包浆了。不过在刷了大量的视频和文档后,我对 Compose 有了答题的认知,并参考官方教程和大牛解读,亲身总结而出 Jetpack架构与compose强化实战。

有需要完整版PDF资料同学可点击文末卡片免费获取~

《Jetpack架构组件从入门到精通》

目录

img

一、Android Jetpack - NavigationNavigation

直接翻译即为导航,它是 Android Jetpack 组件之一,让单 Activity 应用成为首选架构。应用内Fragment页面的跳转则由 Navigation 来处理,开发者无需在处理 FragmentTransaction 的复杂性以及相关的转场动画。

img

二、Android Jetpack - Data Binding

Data Binding 是一个支持库,它使用一种 声明的方式 代替 编码的方式,用来绑定 UI 控件和数据源。

img

三、Android Jetpack - ViewModel & LiveDataViewModel

将视图和逻辑进行了分离。Activity或者Fragment只负责UI显示部分。具体的网络请求或者数据库操作则有ViewModel负责。类似于MVP模式中的Presenter层。

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

img

四、Android Jetpack - Room

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

img

五、Android Jetpack - Paging

Paging Libray分为三部分:DataSource, PagedList, PagedAdapter

img

六、Android Jetpack - WorkManger

WorkManager是Android Jetpack 中管理后台任务的组件。

常见的使用场景:1.向后端服务发送日志或分析数据 2.定期将应用数据与服务器同步

使用 WorkManager API 可以轻松地调度后台任务。可延迟运行(即不需要立即运行)并且在应用退出(进程未关闭)或应用重启时能够可靠运行的任务。

img

七、Android Jetpack架构组件之Lifecycle

为了应用的安全,经常会有从后台切回前台时进行软件确认等安全确认处理的需求。如果是以前的话,这个需求其实是挺难实现的。 但自从Google推出Lifecycle组件以后,这个需求就简单了很多。Lifecycle除了感知从后台切回前台以外, 利用这个组件可以更简单的实现复杂的处理生命周期的操作

img

八、Android Jetpack Compose 最全上手指南Compose

并不是像 RecyclerView、ConstraintLayout 这种做了一个或者几个高级的 UI 控件,而是直接抛弃了我们写了 N 年的 View 和 ViewGroup 那一套东西,从上到下撸了一整套全新的 UI 框架。直白点说就是,它的渲染机制、布局机制、触摸算法以及 UI 的具体写法,全都是新的。

img

《高级Jetpack强化实战》

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

img

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

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

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

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

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

img

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

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

九、Room数据库Migration

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

十一、MotionLayout让动画如此简单

img

十二、Kotlin Flow基础知识详解

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

十四、View Binding替代ButterKnife和Kotlin synthetics

《Jetpack Compose强化实战

目录

img

第一章、使用 Compose 实现底部按钮和首页 banner 以及数据列表

  • Column、Row、ConstraintLayout 布局先知

  • 首页内容的实现

img

第二章、导航规整并实现登录页个人中心页

  • 导航规整
  • 个人中心的实现
  • 登录页面的实现

第三章、实现分类页面

  • Scaffold 简单使用
  • BottomNavigation 和 NavHost 实现底部导航
  • 分类页面的实现
  • Compose 自定义布局实现流式布局

第四章、实现搜索页面

  • ROOM 数据库
  • 官方 Flow Layout
  • 状态布局

第五章、项目页面的实现

  • 获取数据
  • Controllable 实现顶部滑动菜单
  • HorizontalPager 实现页面数据列表
  • Compose 中 Webview 的使用
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Jetpack Compose 组件androidx.compose.material3.Button点击和长按同时监听代码示例,可以参考以下示例代码: ``` import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.gestures.detectTapAndLongPress import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import com.example.myapp.viewmodel.CounterViewModel import kotlinx.coroutines.launch @ExperimentalFoundationApi @Composable fun ButtonClickListener() { val scaffoldState = rememberScaffoldState() var counterViewModel = viewModel<CounterViewModel>() Scaffold( scaffoldState = scaffoldState, modifier = Modifier.fillMaxSize(), content = { Column( modifier = Modifier .padding(top = 10.dp, start = 16.dp, end = 16.dp) .fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally ) { Text(text = "点击或长按按钮可触发计数") Spacer(modifier = Modifier.height(16.dp)) MyButton( onClick = { counterViewModel.incrementCount() }, onLongClick = { counterViewModel.decrementCount() } ) Spacer(modifier = Modifier.height(16.dp)) Text( text = "当前计数:${counterViewModel.count}", style = MaterialTheme.typography.h4 ) } }, bottomBar = { BottomAppBar(cutoutShape = RoundedCornerShape(topStart = 16.dp)) { IconButton(onClick = { }) { Icon(Icons.Default.Save, contentDescription = "Save") } Spacer(Modifier.weight(1f, true)) IconButton(onClick = { }) { Icon(Icons.Default.Share, contentDescription = "Share") } } } ) } @ExperimentalFoundationApi @Composable fun MyButton(onClick: () -> Unit, onLongClick: () -> Unit) { Surface( modifier = Modifier .padding(16.dp) .pointerInput(Unit) { detectTapAndLongPress(onLongClick = onLongClick, onTap = onClick) }, shape = MaterialTheme.shapes.small, color = MaterialTheme.colors.primary ) { Text( text = "Click or long press me", style = MaterialTheme.typography.button, color = Color.White, modifier = Modifier.padding( start = 16.dp, top = 8.dp, end = 16.dp, bottom = 8.dp ) ) } } ``` 这个示例使用了一个自定义的 MyButton 组件,通过 pointerInput() 来同时监听点击和长按事件,并在这两种事件发生时调用不同的回调函数。 另外,这个示例还使用了 Jetpack Compose 中的一些组件,如 Scaffold、Column、Text、BottomAppBar 等,并结合了 ViewModel 来管理计数器的状态,实现了点击或长按按钮可触发计数的效果。 希望这个示例能够对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值