Jetpack Compose 学习

这是 在软件企业文化 最后一节课中 一位同学介绍的一个框架

用于安卓移动开发

目前我的安卓移动开发 应用的框架主要是 flutter 和 uniapp

Jetpack Compose 是 Google 推出的现代 Android UI 工具包,旨在简化和加速用户界面开发。它是一种声明式 UI 框架,允许开发者用更少的代码构建复杂的界面,并且与现有的 Android 应用完全兼容。以下是一些关键概念、特性和使用 Jetpack Compose 开发的基本步骤。

关键概念

  • 声明式UI:不同于传统的命令式编程方式(如在 XML 中定义布局并在 Java/Kotlin 代码中进行操作),Jetpack Compose 使用函数来描述 UI 的状态,当状态变化时,框架会自动更新 UI。

  • Composable 函数:这些是带有 @Composable 注解的函数,用于创建 UI 组件。它们可以嵌套调用其他 Composable 函数以构建层次化的 UI 结构。

  • 状态管理:通过 StateMutableState 类型,可以在 Composable 函数内部或外部定义响应式的数据源。每当状态发生变化时,相关联的 UI 就会自动重新组合(recompose)。

  • 副作用:有时候你需要执行一些不直接依赖于输入参数的操作,比如启动协程、订阅数据流等。Jetpack Compose 提供了 LaunchedEffect, DisposableEffect, rememberUpdatedState 等 API 来处理这类情况。

  • Material Design 支持:内置对 Material Design 组件的支持,包括按钮、文本框、卡片等常用控件,同时也提供了自定义主题的能力。

基本使用步骤

  1. 设置项目

     

    在你的项目中启用 Jetpack Compose,你需要确保 Gradle 文件中包含必要的依赖项。例如,在 build.gradle (Project) 文件中添加:

    gradle
    深色版本
    buildscript {dependencies {classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"// ...}
    }

    并在 build.gradle (Module) 文件中添加:

    gradle
    深色版本
    android {// ...composeOptions {kotlinCompilerExtensionVersion '1.5.3'}
    }dependencies {implementation "androidx.compose.material:material:1.5.0"implementation "androidx.compose.ui:ui:1.5.0"implementation "androidx.compose.ui:ui-tooling-preview:1.5.0"debugImplementation "androidx.compose.ui:ui-tooling:1.5.0"implementation "androidx.activity:activity-compose:1.7.2"// ...
    }

    请注意,版本号应根据最新发布情况进行调整。

  2. 创建 Composable 函数

     

    编写一个简单的 Composable 函数,比如显示一个文本组件:

    kotlin
    深色版本
    @Composable
    fun Greeting(name: String) {Text(text = "Hello $name!")
    }
  3. 集成到 Activity 或 Fragment

     

    在你的主 Activity 中设置内容视图为一个 Composable 函数:

    kotlin
    深色版本
    import android.os.Bundle
    import androidx.activity.ComponentActivity
    import androidx.activity.compose.setContent
    import androidx.compose.material.Textclass MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {Greeting("Android")}}
    }
  4. 运行应用

     

    构建并运行你的应用程序,你应该能够看到由 Greeting Composable 函数生成的 UI。

更多特性

  • 动画:使用 animate*AsState 和 Transition API 创建平滑过渡效果。
  • 手势:利用 Modifier.pointerInput 和 detectTapGestures 等 API 处理触摸事件。
  • 导航:借助 Compose Navigation 库实现页面之间的跳转。
  • 测试:编写单元测试和集成测试来验证 UI 行为。

示例代码

下面是一个稍微复杂一点的例子,展示了如何结合状态管理和用户交互:

kotlin
深色版本
import androidx.compose.foundation.layout.*
import androidx.compose.material.Button
import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp@Composable
fun CounterApp() {var count by remember { mutableStateOf(0) }Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(16.dp),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {Text("Count: $count")Spacer(modifier = Modifier.height(8.dp))Button(onClick = { count++ }) {Text("Increment")}}
}

这段代码定义了一个计数器应用,其中包含一个显示当前计数值的 Text 组件和一个用于增加计数的 Button。每次点击按钮时,状态变量 count 更新,导致 UI 自动刷新。

使用的是Kotlin 语言 

这些是ai给的 介绍 打算明天具体了解一下

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/861019.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于双PI控制器和三电平SVPWM交流同步直线电机矢量控制系统的simulink建模与仿真

1.课题概述基于PSO粒子群优化的PV光伏发电系统simulink建模与仿真。通过PSO粒子群优化进行最大功率跟踪。2.系统仿真结果 3.核心程序与模型 版本:MATLAB2022a 4.系统原理简介光伏(Photovoltaic, PV)发电系统利用太阳能直接转换成电能,是实现可持续能源战略的重要组成部分。…

Gridview使用CheckBox全选与单选 Version 3

还是有网友开发ASP.NET程序,今天联系Insus.NET说,参考下面随笔,无法实现,没有效果。Gridview使用CheckBox全选与单选 Version 2 https://www.cnblogs.com/insus/archive/2013/05/22/3093114.html 几番仔细检查,放大对着搬,照抄,没能错呀!说实的,具体原因,Insus.NET…

RL中on-policy和off-policy的本质区别/重要性采样

讨论了on-policy和off-policy的本质区别。说明了off-policy MC和off-policy TD是如何利用重要性采样的,以及为什么Q-learning不需要进行重要性采样。本随笔的图片都来自UCL强化学习课程lec5 Model-free prediction的ppt (Teaching - David Silver ). 回忆值函数的表达式: \[v…

2024-2025-1 20241319 《计算机基础与程序设计》第十四周学习总结

作业信息这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK14这个作业的目标 《C语言程序设计》第13章作业正文 https://www.cnblogs.com/wchxx/p/18639513**教材学习内容总结 1. 文件的打开与关闭…

视野修炼-技术周刊第115期 | 现代的 Nodejs 能力

① 一些现代的 Nodejs 能力 ② MarkItDown ③ ReactAI ④ 背景移除 ⑤ 智能图片描述生成器生成器欢迎来到第 115 期的【视野修炼 - 技术周刊】,下面是本期的精选内容简介 🔥强烈推荐一些现代的 Nodejs 能力🔧开源工具&技术资讯MarkItDown ReactAI🤖AI工具&资讯背…

2024-2025-1(20241321)《计算机基础与程序设计》第十四周学习总结

这个作业属于哪个课程 <班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(2024-2025-1计算机基础与程序设计第十四周作业)这个作业的目标 <深刻学习C语言,反思一周学习,温故知新>作业正文 ... 本博客链接https://www.…

11. 日期和时间控件

一、日期和时间控件日期和时间类也是 PySide6 中的基本类,利用它们可以设置纪年法、记录某个日期时间点、对日期时间进行计算等。用户输入日期时间及显示日期时间时需要用到日期时间控件,本节介绍有关日期时间的类及相关控件。我们可以在终端中使用 pip 安装 pyside6 模块。 …

浅析FHQ-treap

前言 更好的阅读体验 默认读者会 BST 的基本操作。 节点定义 替罪羊树采用了懒惰删除的方法,不会立即删除某个点,而是在重构时不放进数组。 struct node{ int ch[2], val; int siz1, siz2, cnt, sum; //扣去懒惰删除的节点数量,没扣去懒惰删除的节点数量,树内相同权值的…

20241313刘鸣宇《计算机基础与程序设计》第14周学习总结

2024-2025-1 20241313《计算机基础与程序设计》第14周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标 <写上具…

学习笔记:旋转treap

前言 更好的阅读体验。 无旋 treap。 默认读者会 BST 的基本操作、堆和旋转。 本文旋转部分和上面那篇文章的相同。 代码中是小根堆。 思想 treap 既是一棵二叉查找树(tree),也是一个二叉堆(heap)。 但是如果这两个数据结构用同一个权值维护,那么这两种数据结构是矛盾的。…

最早发明的自平衡二叉树:AVL

前言 更好的阅读体验 默认读者会基本的 BST 操作。 节点定义 平衡因子:BF(BalanceFactor),左子树高 \(-\) 右子树高。 平衡树是让树的形态尽可能像完全二叉树,而不是链。 在 AVL 中,我们认为 \(\left|\text{BF}\right|\le 1\),也就是 BF 为 \(0,1,-1\) 时的子树是平衡的,…

[COCI2015-2016#2] DRZAVA

思路 先把赛时想法搬一部分过来转化题意, 对于 \(n\) 个带权 \(k\) 的点, 任意两点 \(i, j\) 之间有双向连边, 其边权为 \(w_{i, j} = d_{i, j}\) , 求一最小阈值 \(C\) , 满足对于所有 \(w \leq C\) 的边连接后, 存在一个连通块 \(G\), 使得 \[\sum_{i = 1}^{\lvert G \rvert}…