Android笔记(二):JetPack Compose定义移动界面概述

一、JetPack Compose组件概述

JetPack Compose是Google公司在2021年正式推出的声明式UI工具包。Compose库用于开发原生Android应用界面。它取代传统XML文件配置界面,不需要界面编辑工具,而是采用强大Kotlin API以及函数搭建移动应用界面,代码量更少,更简单。JetPack Componse库需要在Android Studio Flamingo及其以上版本,创建Empty Activity 模板应用就可以实现。
JetPack Compose工具包搭建界面比较简单,学习起来也比较容易。虽然Kotlin的代码量很大,但是与传统的XML布局搭建界面相比较,就小得多。值得注意地是,JetPack Compose工具包是纯粹利用Kotlin API来实现的,无法转换为Java代码来实现。

二、组合函数和可预览函数

2.1 组合函数

可组合函数是在函数前增加@Composable注解来定义。JetPack Compose是在可组合函数中可以嵌套多个其他可组合函数定义界面层次。

@Composable fun 函数名([参数列表]) {
//函数体
}

例如:定义一个带有图标和文字的按钮。

@Composable
fun Greeting() {val context = LocalContext.currentBox(contentAlignment= Alignment.Center){//定义按钮Button(onClick={Toast.makeText(context,"显示第一个Compose",Toast.LENGTH_LONG).show()}){//定义一行Row(verticalAlignment = Alignment.CenterVertically){//定义文本Text(text = "点击",fontSize = 30.sp)//定义图标Icon(imageVector = Icons.Filled.Face,tint = Color.White,contentDescription="空")}}}
}

在主活动MainActivity中调用组合函数,代码如下:

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {ForCourseWeek4Theme {// A surface container using the 'background' color from the themeSurface(modifier = Modifier.fillMaxSize(),color = MaterialTheme.colorScheme.background) {Greeting()}}}}
}

运行结果如下图所示:
在这里插入图片描述

2.2 可预览函数

如果组合函数没有任何参数,这时可以在这种组合函数前加上再增加@Perview注解,就声明一个预览函数。可以在Android Studio的Design视图显示预览函数代码组成的界面。可单击按钮,将预览函数定义界面部署到模拟器显示界面。当有多个预览函数时,会生成多个按钮,根据需要选择实现模拟器预览界面。
修改上述代码,代码如下:

@Preview(showBackground = true)
@Composable
fun Greeting() {val context = LocalContext.currentBox(contentAlignment= Alignment.Center){//定义按钮Button(onClick={Toast.makeText(context,"显示第一个Compose",Toast.LENGTH_LONG).show()}){//定义一行Row(verticalAlignment = Alignment.CenterVertically){//定义文本Text(text = "点击",fontSize = 30.sp)//定义图标Icon(imageVector = Icons.Filled.Face,tint = Color.White,contentDescription="空")}}}
}

定义为可预览函数,可以在编辑器的Design视图中显示可预览函数的界面设计,如下图红色箭头所示:
在这里插入图片描述
也可以直接在模拟器中运行可预览函数,查看运行结果,类似下图,执行红色箭头所示的按钮:
在这里插入图片描述
预览函数与在活动Activity在模拟器调用的显示效果略有不同,因为上述的可预览函数没有定义宽度和高度。

三、Modifier修饰符

Modifier起到组件属性配置的工具。Modifier调用属性配置的函数,仍会返回Modifier对象,因此可以对Modifier对象链式调用的为组件设置样式。修饰符可以修饰或扩充可组合项,执行以下操作:

  • 更改可组合项的大小、布局、行为和外观
  • 添加信息,如无障碍标签
  • 处理用户输入
  • 添加高级互动,如使元素可点击、可滚动、可拖动或可缩放

修饰符是标准的 Kotlin 对象。可以通过调用具体Modifier 对象来创建修饰符
常见的修饰符:

Modifier.background:设置被修饰组件背景色
Modifier.fillMaxSize、Modifier.fillMaxWidth、Modifier.fillMaxHeight:设置被修饰组件填充父空间、填满宽度、填满高度
Modifier.wrapContentSize、Modifier.wrapContentWidth、Modifier.wrapContentHeight:设置被填充组件设置成按照组件本身的大小、组件的宽度、组件的高度
Modifier.size:设置被修饰组件的大小

Modifier.offset:设置移动的偏移量

Modifier.border:设置边框 Modifier.padding:设置内边距(放在border 前)、外边距(放在border后)
修饰符函数的顺序非常重要。由于每个函数都会对上一个函数返回的 Modifier 进行更改,因此顺序会影响最终结果。
已知如下代码,代码最后设置边距padding,此时表示设置内边距:

@Composable
fun Greeting() {Column(modifier = Modifier.fillMaxWidth().wrapContentHeight().background(Color.Yellow).padding(24.dp)) {Text(text = "Hello,")Text(text = "Android")}
}

运行结果如下:
在这里插入图片描述

将上述代码调整样式设置,先设置边距padding,表示设置外边距,代码如下:

@Composable
fun Greeting() {Column(modifier = Modifier.padding(24.dp).background(Color.Yellow).fillMaxWidth().wrapContentHeight()) {Text(text = "Hello,")Text(text = "Android")}
}

此时,运行结果发生了变化,如下图所示:
在这里插入图片描述
”Jetpack Compose 教程“ https://developer.android.google.cn/jetpack/compose/tutorial?hl=zh-cn

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

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

相关文章

nextjs构建服务端渲染,同时使用Material UI进行项目配置

一、创建一个next项目 使用create-next-app来启动一个新的Next.js应用,它会自动为你设置好一切 运行命令: npx create-next-applatest 执行结果如下: 启动项目: pnpm dev 执行结果: 启动成功! 二、安装Mater…

课题学习(六)----安装误差校准、实验方法

一、 安装误差校准 1.1 数学模型 在实际情况下,即使努力尝试使三轴加速度计和三轴磁通门正交,也不可能保证坐标轴的正交和安装的准确居中。无论采用何种解法,都会导致最终解的误差。因此,要想提高测量精度,就必须开发…

验收测试的关键步骤您知道吗

验收测试是软件开发生命周期中的重要环节,用于验证项目交付是否符合用户需求和质量标准。本文将介绍验收测试的定义及实施验收测试的关键步骤。 一、验收测试的定义和目标 确保项目交付质量:通过主动验证和评估软件系统的功能、性能和质量,确…

轻量级虚拟化技术草稿

Support Tech ST.1 virtiofs ST.1.1 fuse framework 引用wiki中关于fuse的定义: Filesystem in Userspace (FUSE) is a software interface for Unix and Unix-like computer operating systems that lets non-privileged users create their own file systems w…

Java中在循环体内拼接字符串时为什么使用StringBuilder而不是String

在循环体内拼接字符串时为什么使用StringBuilder而不是String 在《阿里巴巴Java开发手册》一书中提到了: 循环体内,字符串的连接方式,请使用 StringBuilder 的 append 方法进行扩展。(而不要用String的方式) 说明&…

31 数据分析(中)numpy介绍

文章目录 工具excelTableauPower Queryjupytermatplotlibnumpy安装导入包快速掌握(bushi)array和list的相互转化 np的range多维数组的属性array的改变形状array升降维度array内元素的类型数和array的运算array之间的加减法认识轴切片条件与逻辑修改值app…

系统韧性研究(1)| 何谓「系统韧性」?

过去十年,系统韧性作为一个关键问题被广泛讨论,在数据中心和云计算方面尤甚,同时它对赛博物理系统也至关重要,尽管该术语在该领域不太常用。大伙都希望自己的系统具有韧性,但这到底意味着什么?韧性与其他质…

气象台卫星监测vr交互教学增强学生的学习兴趣和动力

对地观测是以地球为研究对象,依托卫星、飞船等光电仪器,进行各种探测活动,其核心是遥感技术,因此为了让遥感专业学员能提前熟悉对地观测规则、流程、方法及注意事项,借助VR虚拟现实制作的三维仿真场景,能让…

【PX4】解决Resource not found: px4问题【踩坑实录】

【PX4】解决Resource not found: px4问题【踩坑实录】 文章目录 【PX4】解决Resource not found: px4问题【踩坑实录】1. 问题描述2. 错误排查 1. 问题描述 笔者在配置好px4的所有环境后,使用自己写的launch文件时,出现了报错 sjhsjhR9000X:~$ roslaunc…

spring 注入 当有两个参数的时候 接上面

新加一个int 型的 age 记得写getset方法和构造方法 ((((((( 构造方法的作用——无论是有参构造还是无参构造,他的作用都是为了方便为对象的属性初始化值 构造方法是一种特殊的方…

【C++14算法】make_unique

文章目录 前言一、make_unique函数1.1 什么是make_unique?1.2 如何使用make_unique?1.3 make_unique的函数原型如下:1.4 示例代码示例1: 创建一个动态分配的整数对象示例2: 创建一个动态分配的自定义类型对象示例3: 创建一个动态分配的数组对象示例4: 创建一个动态…

[ROS2系列] ubuntu 20.04测试rtabmap 3D建图(二)

接上文我们继续 如果我们要在仿真环境中进行测试&#xff0c;需要将摄像头配置成功。 一、配置位置 sudo vim /opt/ros/foxy/share/turtlebot3_gazebo/models/turtlebot3_waffle/model.sdf 二、修改 <joint name"camera_rgb_optical_joint" type"fixed&…

YOLOv5算法改进(3)— 注意力机制介绍(ECA、SOCA和SimAM)

前言:Hello大家好,我是小哥谈。注意力机制是近年来深度学习领域内的研究热点,可以帮助模型更好地关注重要的特征,从而提高模型的性能。注意力机制可被应用于模型的不同层级,以便更好地捕捉图像中的细节和特征,这种模型在计算资源有限的情况下,可以实现更好的性能和效率。…

解决 Git:This is not a valid source path/URL

由于sourcetree 可以获取不同仓库的代码&#xff0c;而我的用户名密码比较杂乱&#xff0c;导致经常会修改密码&#xff0c;在新建拉去仓库代码的时候sourcetree 不会提示你密码错误&#xff0c;直接提示 This is not a valid source path/URL。 在已存在的代码仓库&#xff0…

怎么把heic改成jpg?方法大全在这里

怎么把heic改成jpg&#xff1f;HEIC是一种现代的图像文件格式。它是由ISO制定的标准&#xff0c;并得到了苹果公司的支持和推广。与JPG等传统图像格式相比&#xff0c;HEIC格式可以提供更好的图像质量&#xff0c;并且占用更少的存储空间。这使得它在手机、平板电脑和其他移动设…

wps演示时图片任意位置拖动

wps演示时图片任意位置拖动 1.wps11.1版本&#xff0c;其他版本的宏插件可以自己下载。2.先确认自己的wps版本是不是11.13.检查是否有图像工具4.检查文件格式和安全5.开发工具--图像6.选中图像控件&#xff0c;右击选择查看代码&#xff0c;将原有代码删除&#xff0c;将下边代…

竞赛选题 深度学习 植物识别算法系统

文章目录 0 前言2 相关技术2.1 VGG-Net模型2.2 VGG-Net在植物识别的优势(1) 卷积核&#xff0c;池化核大小固定(2) 特征提取更全面(3) 网络训练误差收敛速度较快 3 VGG-Net的搭建3.1 Tornado简介(1) 优势(2) 关键代码 4 Inception V3 神经网络4.1 网络结构 5 开始训练5.1 数据集…

【知网检索会议】第三届教育,语言与艺术国际学术会议(ICELA 2023)

第三届教育&#xff0c;语言与艺术国际学术会议(ICELA 2023) The 3rd International Conference on Education, Language and Art 第三届教育&#xff0c;语言与艺术国际学术会议&#xff08;ICELA 2023&#xff09;将于2023年11月17-19日在中国北京召开。会议主要围绕会议主…

ubuntu mmdetection配置

mmdetection配置最重要的是版本匹配&#xff0c;特别是cuda&#xff0c;torch与mmcv-full 本项目以mmdetection v2.28.2为例介绍 1.查看显卡算力 因为gpu的算力需要与Pytorch依赖的CUDA算力匹配&#xff0c;低版本GPU可在相对高的CUDA版本下运行&#xff0c;相反则不行 算力…

MFC为“对话框中的控件添加变量”,QT中使用“ui.对象名称”来调用控件

MFC中使用 向导 可以为“对话框中的控件添加变量”&#xff1b; 但是在QT中&#xff0c;一般都是使用“ui.对象名称”来调用控件&#xff01; 1、MFC中为“对话框中的控件添加变量”&#xff1b; 1.1 因为编辑框中的数据可能会经常变化&#xff0c;所以需要它们每个控件关联个…