Compose第一弹 可组合函数+Text

目标:

1.Compose是什么?有什么特征?

2.Compose的文本控件

一、Compose是什么?

Jetpack Compose 是用于构建原生 Android 界面的新工具包。

Compose特征:

1)声明式UI:使用声明性的函数构建一个简单的界面组件。

2)可组合思想:调用可组合函数来定义所需的元素,通过元素组合形成UI。

二、可组合函数

Compose 是围绕可组合函数构建的。这些函数可让您以程序化方式定义应用的界面,只需描述应用界面的外观并提供数据依赖项,而不必关注界面的构建过程(初始化元素、将其附加到父项等)。如需创建可组合函数,只需将 @Composable 注解添加到函数名称中即可。

2.1 页面入口

Android 的Activity,怎么接入Compose组件呢?

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {Text("Hello world!")}}
}

在setContent中,设置需要引入的Compose组件。

其中,Text就是一个Compose可组合函数。

androidx.activity.compose.ComponentActivity
public fun ComponentActivity.setContent(parent: CompositionContext? = null,content: @Composable () -> Unit
) {val existingComposeView = window.decorView.findViewById<ViewGroup>(android.R.id.content).getChildAt(0) as? ComposeViewif (existingComposeView != null) with(existingComposeView) {setParentCompositionContext(parent)setContent(content)} else ComposeView(this).apply {// Set content and parent **before** setContentView// to have ComposeView create the composition on attachsetParentCompositionContext(parent)setContent(content)// Set the view tree owners before setting the content view so that the inflation process// and attach listeners will see them already presentsetOwners()setContentView(this, DefaultActivityContentLayoutParams)}
}

从中可以看出,通过ComposeView桥接View系统和Compose系统。

setContent 块定义了 activity 的布局,我们会在其中调用可组合函数。可组合函数只能从其他可组合函数调用。

2.2 定义可组合函数

定义包含文本显示的MessageCard

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

可以看出,Compose的UI系统不再依赖XML布局,以及布局编辑器。

2.3 Compose预览

在可组合函数控件,添加 @Preview 即可对组件进行预览。

@Preview
@Composable
fun PreviewMessageCard() {MessageCard("Android")
}

三、Compose布局 

3.1 Column垂直布局

Column(modifier = Modifier.wrapContentSize().fillMaxSize().padding(paddingValues).padding(horizontal = 10.dp)) {Text(text = "Model List", modifier = Modifier.padding(top = 10.dp))Divider(thickness = 1.dp, modifier = Modifier.padding(vertical = 5.dp))LazyColumn(modifier = Modifier.wrapContentHeight()) {items(items = appViewModel.modelList,key = { modelState -> modelState.id }) { modelState ->ModelView(navController = navController,modelState = modelState,appViewModel = appViewModel)}}}

3.2 Row水平布局

Row水平布局相当于View系统的LinearLayout.

Row(horizontalArrangement = Arrangement.Center,modifier = Modifier.fillMaxWidth()) {Text(text = messageData.text,textAlign = TextAlign.Center,color = MaterialTheme.colorScheme.inversePrimary,fontSize = 12.sp,lineHeight = 12.sp,modifier = Modifier.wrapContentWidth().background(color = MaterialTheme.colorScheme.inverseOnSurface,shape = RoundedCornerShape(5.dp)).padding(5.dp).widthIn(max = 300.dp))}

四、使用 Material Design

Jetpack Compose 原生提供 Material Design 3 及其界面元素的实现。您将使用 Material Design 样式改进 MessageCard 可组合项的外观。

首先,使用在您的项目中创建的 Material 主题 ComposeTutorialTheme 和 Surface 来封装 MessageCard 函数。 在 @Preview 和 setContent 函数中都需要执行此操作。这样一来,可组合项即可沿用应用主题中定义的样式,从而在整个应用中确保一致性。

Material Design 是围绕 ColorTypographyShape 这三大要素构建的。您将逐一添加这些要素。

// ...class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {ComposeTutorialTheme {Surface(modifier = Modifier.fillMaxSize()) {MessageCard(Message("Android", "Jetpack Compose"))}}}}
}@Preview
@Composable
fun PreviewMessageCard() {ComposeTutorialTheme {Surface {MessageCard(msg = Message("Lexi", "Take a look at Jetpack Compose, it's great!"))}}
}

4.1 颜色

通过 MaterialTheme.colorScheme,使用已封装主题中的颜色来设置样式。

如需更改此设置,您可以在 MaterialTheme.kt 文件中将 dynamicColor 设为 false

4.2 Typography(排版)

MaterialTheme 中提供了 Material Typography 样式,只需将其添加到 Text 可组合项中即可。

Column {Text(text = msg.author,color = MaterialTheme.colorScheme.secondary,style = MaterialTheme.typography.titleSmall)Spacer(modifier = Modifier.height(4.dp))Surface(shape = MaterialTheme.shapes.medium, shadowElevation = 1.dp) {Text(text = msg.body,modifier = Modifier.padding(all = 4.dp),style = MaterialTheme.typography.bodyMedium)}}

4.3 Shape(形状)

通过 Shape,我们可以添加最后的“点睛之笔”。首先,将消息正文封装在 Surface 可组合项中。这样即可自定义消息正文的形状和高度。此外,还要为消息添加内边距,以改进布局。

4.4 启用深色主题

您可以启用深色主题(或夜间模式),以避免显示屏过亮(尤其是在夜间),或者只是节省设备电量。由于支持 Material Design,Jetpack Compose 默认能够处理深色主题。使用 Material Design 颜色、文本和背景时,系统会自动适应深色背景。

import android.content.res.Configuration@Preview(name = "Light Mode")
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES,showBackground = true,name = "Dark Mode"
)
@Composable
fun PreviewMessageCard() {ComposeTutorialTheme {Surface {MessageCard(msg = Message("Lexi", "Hey, take a look at Jetpack Compose, it's great!"))}}
}

uiMode = Configuration.UI_MODE_NIGHT_YES, 设置深色主题。

相关知识网址:

Jetpack Compose 基础知识

https://developer.android.google.cn/codelabs/jetpack-compose-basics?hl=zh-cn&continue=https%3A%2F%2Fdeveloper.android.google.cn%2Fcourses%2Fpathways%2Fcompose%3Fhl%3Dzh-cn%23codelab-https%3A%2F%2Fdeveloper.android.com%2Fcodelabs%2Fjetpack-compose-basics#1

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

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

相关文章

2024-2025年跨境电商展览会计划表:共筑未来跨境行业的繁荣

-----------------------------2024年跨境电商展计划如下---------------------------- 2024年&#xff0c;2025年国内跨境电商行业将迎来一系列重大的展会活动&#xff0c;是企业展示品牌、交流趋势、拓展商机的重要平台。全国各地展会排期信息现已出炉&#xff0c;记得收藏哦…

Linux中断

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、中断的相关概念1.中断号2.中断的申请和释放申请API函数如下&#xff1a;释放API函数如下&#xff1a;中断处理函数如下&#xff1a;使能和禁止中断 二、上半…

el-select 组件获取整个对象

法一&#xff1a;要获取整个对象的话&#xff0c;如果有列表就可以遍历列表&#xff0c;找到指定对象 let obj this.chainTaskList.find((item) > item.chainTaskNo e); if (obj) {this.form.storeNo obj.storeNo;this.form.storeName obj.couponVO.storeName; }或 fo…

AI推介-大语言模型LLMs论文速览(arXiv方向):2024.05.10-2024.05.20

文章目录~ 1.MeteoRA: Multiple-tasks Embedded LoRA for Large Language Models2.Zero-Shot Stance Detection using Contextual Data Generation with LLMs3.A Multi-Perspective Analysis of Memorization in Large Language Models4.Improved Content Understanding With E…

CF609D D. Gadgets for dollars and pounds

题目链接 题意&#xff1a; 在最少的时间内并且价格在s内从m个物品中购买k个物品 题解&#xff1a; 如果Nura能在x天内买到k个小玩意&#xff0c;那么她也能在x1天内买到这些小玩意。所以&#xff0c;这个答案是单调的。因此&#xff0c;我们可以使用二分查找来找到最小的天…

nvidia origin nx 刷机JETPACK 6

条件&#xff1a; 1.sdkmanager 链接&#xff1a;https://pan.baidu.com/s/1pmeT7_vKF_NXvP8xEhCelw?pwd8q1e 提取码&#xff1a;8q1e 2.ubuntu 20或者ubuntu22 3.nvidia orin nx Nvidia Jetson Orin NX&#xff08;一&#xff09;开始刷机_jetson nx刷机-CSDN博客

基于python实现的深度学习web多格式纠错系统

基于python实现的深度学习web多格式纠错系统 开发语言:Python 数据库&#xff1a;MySQL所用到的知识&#xff1a;Django框架工具&#xff1a;pycharm、Navicat、Maven 系统功能实现 用户登录 登录功能是本系统一个非常重要的功能&#xff0c;这极大的保护了系统的安全。登录…

大模型智力升级:AI的未来之路

大模型的发展引领了人工智能的新时代&#xff0c;其强大的数据处理和学习能力在医疗、金融、教育等众多领域取得了令人瞩目的成就。然而&#xff0c;随之而来的挑战也不容忽视。尽管大模型在特定任务上展现出了卓越的性能&#xff0c;但它们在理解复杂语境、处理未见情况的能力…

Spring之 依赖项

文章目录 依赖注入基于构造函数的依赖注入基于 Setter 的依赖注入依赖解析过程依赖注入的示例 依赖关系和配置详细信息直接值&#xff08;原语、字符串等&#xff09;idref标签References to Other Beans &#xff08;对其他 Bean的引用&#xff09;Inner Beans&#xff08;内部…

【NumPy】全面解析add函数:高效数组加法操作

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

【全开源】Java共享茶室棋牌室无人系统支持微信小程序+微信公众号

打造智能化休闲新体验 一、引言&#xff1a;智能化休闲时代的来临 随着科技的飞速发展&#xff0c;智能化、无人化服务逐渐渗透到我们生活的各个领域。在休闲娱乐行业&#xff0c;共享茶室棋牌室无人系统源码的出现&#xff0c;不仅革新了传统的休闲方式&#xff0c;更为消费…

聊聊最近很火的混合专家模型(MoE)

前段时间&#xff0c;在2024年NVIDIA GTC大会上&#xff0c;英伟达不小心透露了GPT-4采用了MoE架构&#xff0c;模型有1.8万亿参数&#xff0c;由8个220B模型组成&#xff0c;与此前的GPT-4泄露的信息一致。 近半年多以来&#xff0c;各类MoE大模型更是层出不穷。在海外&#…

【Go】十一、标准化请求返回与viper管理配置文件的简单使用

请求返回的返回方法 这里指的是&#xff1a;传参的方式&#xff0c;类似与Java的r.setData() 创建目录&#xff1a; user-web global response user.go 定义一个结构体用于接收返回值&#xff0c;这里的 json 属于将对象转换为 json 时的规则定义。 时间处理 方法一&#x…

【机器分配问题】

问题&#xff1a; 现有设备n台&#xff0c;可投放到m个项目中&#xff0c;每个项目的产量与投入该项目的设备数量有关。如表2所示为三个项目的产量&#xff08;吨&#xff09;和投入设备&#xff08;台&#xff09;的关系。求对m个项目的最优设备分配&#xff0c;使总产量效益…

2024年QMT智能量化交易全解读:一文带你深入了解什么是QMT

随着科技的飞速发展和金融市场的日益成熟&#xff0c;量化交易逐渐成为投资者关注的焦点。QMT&#xff08;Quantitative Market Trading&#xff09;智能量化交易系统&#xff0c;作为量化交易领域的重要工具&#xff0c;以其高效、精准、自动化的特点&#xff0c;受到越来越多…

【TensorFlow深度学习】Dropout层工作原理与实际运用

Dropout层工作原理与实际运用 Dropout层工作原理与实际运用Dropout&#xff1a;随机失活的艺术工作机制实现代码示例实际运用成效结语 Dropout层工作原理与实际运用 在深度学习的征途中&#xff0c;模型的过拟合问题一直是研究者们面临的一大挑战。过拟合意味着模型在训练数据…

Ableton Live 11 Suite for Mac:音乐创作的全能伙伴

在数字音乐创作的广阔天地中&#xff0c;Ableton Live 11 Suite for Mac无疑是一颗璀璨的明星。作为一款专业的音乐制作软件&#xff0c;它集合了音频录制、编辑、混音、母带制作等全方位功能&#xff0c;为Mac用户提供了无与伦比的音乐创作体验。 Ableton Live 11 Suite拥有直…

Ubuntu/Linux 安装Paraview

文章目录 0. 卸载已有ParaView1. 安装ParaView1.1 下载后安装 2.进入opt文件夹改名3. 更改启动项4. 创建硬链接5. 添加桌面启动方式6. 即可使用 0. 卸载已有ParaView YUT 1. 安装ParaView https://www.paraview.org/ 1.1 下载后安装 找到下载的文件夹&#xff0c;文件夹内…

NTLM Relay Gat:自动化NTLM中继安全检测工具

关于NTLM Relay Gat NTLM Relay Gat是一款功能强大的NTLM中继威胁检测工具&#xff0c;该工具旨在利用Impacket工具套件中的ntlmrelayx.py脚本在目标环境中实现NTLM中继攻击风险检测&#xff0c;以帮助研究人员确定目标环境是否能够抵御NTLM中继攻击。 功能介绍 1、多线程支持…

日用百货元宇宙 伊利牛奶亮相博鳌论坛

近日,博鳌亚洲论坛2024年会在海南博鳌举行,本次年会以“亚洲与世界:共同的挑战,共同的责任”为主题,受到了亚洲各国的高度重视。在本次论坛上,伊利牛奶旗下的金典鲜牛奶作为博鳌亚洲论坛2024年年会官方唯一指定鲜奶亮相,以顶配鲜活营养,向世界贡献中国的健康方案。据悉,这是伊利…