jetpack compose系列(入门基础案例讲解)

13 篇文章 0 订阅
4 篇文章 0 订阅

前言:

在上一章讲完compose的设计原理和基本概念之后,大家对compose的基本设计应该有了一个大概的了解,Jetpack Compose是在2019Google i/O大会上发布的新的库。Compose库是用响应式编程的方式对View进行构建,可以用更少更直观的代码,

更强大的功能,能提高开发速度(这一段是谷歌自己说的)。 说实话,View/Layout的模式对安卓工程师来说太过于熟悉,对于学习曲线陡峭的Jetpack Compose能不能学会还是有所担心,所以这一篇我们再来讲一些基本案例来为大家加深理解。

1. 教程

1.1 创建新的项目或导入库

Jetpack Compose是从Android Studio 4.2开始支持的,所以需要通过4.2(现在是canary版本)创建新的项目或者添加导入库。这里按照创建新的项目来进行介绍。

根据上图所示,在创建新的项目时需要选择Empty Compose Activity

此时模块中的build.gradle文件会新增下列的库的依赖。

`dependencies {     ...     implementation 'androidx.ui:ui-layout:"${compose_version}"'     implementation 'androidx.ui:ui-material:"${compose_version}"'     implementation 'androidx.ui:ui-tooling:"${compose_version}"'     ... }`

还有在模块的build.gradle文件中新增下列的设置。

`android {     ...          buildFeatures {         compose true     }          composeOptions {         kotlinCompilerExtensionVersion "${compose_version}"          kotlinCompilerVersion "1.3.70-dev-withExperimentalGoogleExtensions-20200424"     } }`

1.2 UI相关

1.2.1 @Compose

所有关于构建View的方法都必须添加@Compose的注解才可以。并且@Compose跟协程的Suspend的使用方法比较类似,被@Compose的注解的方法只能在同样被@Comopse注解的方法中才能被调用。

`@Composable fun Greeting(name: String) {     Text(text = "Hello $name!") }`

1.2.2 @Preview

加上@Preview注解的方法可以在不运行App的情况下就可以确认布局的情况。

@Preview的注解中比较常用的参数如下:

  1. name: String: 为该Preview命名,该名字会在布局预览中显示。
  2. showBackground: Boolean: 是否显示背景,true为显示。
  3. backgroundColor: Long: 设置背景的颜色。
  4. showDecoration: Boolean: 是否显示Statusbar和Toolbar,true为显示。
  5. group: String: 为该Preview设置group名字,可以在UI中以group为单位显示。
  6. fontScale: Float: 可以在预览中对字体放大,范围是从0.01。
  7. widthDp: Int: 在Compose中渲染的最大宽度,单位为dp。
  8. heightDp: Int: 在Compose中渲染的最大高度,单位为dp。

上面的参数都是可选参数,还有像背景设置等的参数并不是对实际的App进行设置,只是对Preview中的背景进行设置,为了更容易看清布局。

`@Preview(showBackground = true, name = "Home UI", showDecoration = true) @Composable fun DefaultPreview() {     MyApplicationTheme {         Greeting("Android")     } }`

在IDE的右上角有CodeSplit,Design三个选项。分别是只显示代码,同时显示代码和布局和只显示布局。
当更改跟UI相关的代码时,会显示如下图的一个横条通知,点击Build&Refresh即可更新显示所更改代码的UI。

1.2.3 setContent

setContent的作用是和zaiLayout/View中的setContentView是一样的。
setContent的方法也是有@Compose注解的方法。所以,在setContent中写入关于UI的@Compopse方法,即可在Activity中显示。

    `override fun onCreate(savedInstanceState: Bundle?) {         super.onCreate(savedInstanceState)         setContent {             JetpackComposeDemoTheme {                 Greeting("Android")             }         }     }`

上面我们讲了一些@Compose@preview等方法,现在我们再来讲讲一些组件的应用

2.1 组件应用

liveData是一个数据持有类

  • 能够感知组件的生命周期,确保仅更新活跃组件
  • 不会因Activity停止而导致崩溃,如果观察者的生命周期处于非活跃状态(如返回栈中的 Activity),则它不会接收任何 LiveData 事件
  • 持有的数据可被观察者观察,在底层数据更改时通知视图
  • 一对多观察者:观察者会绑定lifecycle对象,在生命周期结束时会自我清理(不会发生内存泄露)
  • 共享资源:可以使用单例模式扩展 LiveData 对象以封装系统服务,以便在应用中共享它们。

liveData使用:

  • MutableLiveData:LiveData(抽象类)的子类
  • liveData.postValue():可在任意线程下执行(切换线程操作)
  • liveData.setValue():只能在主线程中执行
  • liveData.observe():注册观察者
  • observe()源码:注册观察者保存在mObserves(map)中
  • 感知生命周期:owner.getLifecycle().addObserver(wapper),改变时调用onstatechanged()

观察者有两种情况会被回调:

1、postValue时会遍历观察者然后回调

2、当组件生命周期发生变化或者第一次注册观察者时回调

粘性事件:

这里得满足两个条件会触发粘性事件 1.数据发送早于注册监听 2.监听者的owner生命周期进入活跃状态

2.2 ViewModel和DataBinding

  • viewModel:注重以生命周期的方式存储和管理界面相关数据,不受activity生命周期影响
  • 数据持久化:生命周期不受限制
  • 异步回调问题不会造成内存泄露
  • 隔离model层和view层:解耦
  • Fragment间共享数据
  • DataBinding:实现双向绑定,数据和UI同步

作用:当数据源发生改变时,及时更新给UI(p层做的事情交给系统源码去做)

2.3 Navigation和Fragment

Navigation:导航(回退栈)

三大件:

Navigation Graph:导航图,包含了所有导航相关信息的XML资源。一般防止在res/navigation目录下

NavHost:容器,用来显示Fragment的,即Activity中的fragment,要求实现NavHost

NavController:在NavHost中管理应用导航的对象

一句话就是,通过NavController,获取当行图中的特定路径以及目标,导航到特定的目标放到NavHost中

Navigation是用来管理Fragment的切换,并且可以通过可视化的方式,看见APP的交互流程。

总结

我们整理了一份阿里P7级别的Android架构师全套学习资料,特别适合有3-5年以上经验的小伙伴深入学习提升。

主要包括腾讯,以及字节跳动,阿里,华为,小米,等一线互联网公司主流架构技术。如果你有需要,尽管拿走好了。

请添加图片描述

如果你觉得自己学习效率低,缺乏正确的指导,可以扫描下方二维码,加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧!

群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值