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

news2024/9/24 3:28:00

一、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.current
    Box(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 theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    Greeting()
                }
            }
        }
    }
}

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

2.2 可预览函数

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

@Preview(showBackground = true)
@Composable
fun Greeting() {
    val context = LocalContext.current
    Box(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")
    }
}

此时,运行结果发生了变化,如下图所示:
在这里插入图片描述

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

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

相关文章

请求的转发和重定向

RequestDispatcher接口实现转发: jsp1上链接到Servlet,Servlet再转发(关键在这里怎么实现转发??) 演示index.html页面---->Servlet1(转发到)------>Servlet2 实现转发流程 1.用HttpServletReques…

如何使用CDN加载静态资源

文章目录 前言工具场景七牛云创建空间存储 控制台查看后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:前端 🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误…

《机器学习》- 第3章 线性模型

文章目录 3.1 基本形式3.2 线性回归一元线性回归多元线性回归 3.3 对数几率回归3.4 线性判别分析3.5 多分类学习3.6 类别不平衡问题 3.1 基本形式 问题描述: 函数形式: 向量形式: 许多功能更为强大的非线性模型可在线性模型的基础上引入层…

Java项目如何防止SQL注入的四种方案

什么是SQL注入 SQL注入(SQL Injection)是一种常见的网络安全漏洞,它允许攻击者通过操纵应用程序的输入来执行恶意的SQL查询。这种漏洞发生在应用程序没有正确验证、过滤或转义用户提供的输入数据时。攻击者可以利用这个漏洞来执行未经授权的…

笔记本怎么录制屏幕?推荐3个实用技巧

在当今信息化快速发展的时代,笔记本录制屏幕成为人们日常生活中经常需要面对的问题。无论是办公、学习还是娱乐,录制屏幕都有着广泛的应用。可是笔记本怎么录制屏幕呢?接下来,本文将介绍3种常见的笔记本录制屏幕方法,我…

Python:Jupyter:OSError: Initializing from file failed

在学习Python的时候,我在进行导入外部文件的时候总是出现问题,总是乱导文件,可能碰巧文件导进去了,这次记录一下导入.csv文件失败的原因 read_csv时发生报错:OSError: Initializing from file failed filepathr"…

zabbix自定义监控内容和自动发现

6 目录 一、自定义监控内容: 1.明确需要执行的 linux 命令 2.创建 zabbix 的监控项配置文件,用于自定义 key: 3. 在 Web 页面创建自定义监控项模板: 3.1 创建模板: 3.2 创建监控项: 3.3 创建触发器&#…

C 语言数据类型概述

int 表示基本的整数类型, long, short, unsigned, signed 提供基本整数类型的变式. char 用于指定字符, 也可以表示较小的整数. float, double, long double 表示浮点数. _Bool 表示布尔值 (true 或者 false) _Complex 和 _Imaginary 分别表示复数和虚数. 通过这些关键字创…

Linux 内核 LTS 期限将从 6 年恢复至 2 年

导读在日前举行的欧洲开源峰会上,Linux 内核开发人员兼《Linux Weekly News》执行主编 Jonathan Corbet 介绍了 Linux 内核的最新动态以及未来的发展方向。其中一项即将发生的重大变化是:Linux 内核的长期支持 (LTS) 时间将从六年缩短至两年。 目前 Lin…

基于Java+SpringBoot+Vue在线家具商城系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

从零开始的Transformers第二篇:代码解析transformer架构

代码解析transformer架构 总体解析输入部分词向量Input Embedding 位置编码编码器自注意力机制掩码多头自注意力机制Feed ForwardLayer Norm残差链接Encoder Layer 解码器输出头总体模型所有代码 总体解析 上面是 transformer 的论文中的架构图,从上面拆分各个模块的…

2023版 STM32实战8 独立看门狗(IWDG)

IWDG简介 STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障。 说人话就是能解决程序跑飞的问题。 编写代码思路 -1- 使用这个功能必须解除写保护 -2-…

Gartner:55%的组织,正在试用ChatGPT等生成式AI

10月4日,全球著名信息咨询调查机构Gartner在官网,公布了一项调查数据,55%的组织正在使用或试验生成式AI;超过一半的组织在过去10个月内,增加了对生成式 AI 投资。 本次,Gartner共对1419名企业高管/领导者进行了调查,45%的人表示正处于生成式AI试用期,10%已经在实际业务…

JavaScript Web APIs第六天笔记

Web APIs - 第6天笔记 目标:能够利用正则表达式完成小兔鲜注册页面的表单验证,具备常见的表单验证能力 正则表达式综合案例阶段案例 正则表达式 正则表达式(Regular Expression)是一种字符串匹配的模式(规则&#xf…

基于Cucumber的行为驱动开发(BDD)实例

本篇介绍 Cucumber 的基本使用, 因为Cucumber是BDD的工具, 所以首先需要弄清楚什么是BDD,而在介绍BDD之前,先看看常见的软件开发方法。 常见的软件开阿发方法 面向过程开发(Procedural Development)&…

Linux环境安装mysql8.0

1个人习惯我喜欢给软件安装在/use/local下,我使用的finalshell软件,直接手动新建一个文件夹名字为mysql 2下载mysql wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz 3解压文件 tar -xvf mysql-8.0.2…

操作系统 —— 调度算法

假设一个系统中有5个进程,它们达到时间和服务时间如图所示,忽略I/O及其他开销时间,若分别按先来先服务(FCFS)、非抢占式及抢占式短进程优先(SPF)、高响应比优先(HRRN)、时…

蓝桥杯 使用sort排序(c++)

sort是一个C已经为我们实现好的工具&#xff0c;当我们要用它时&#xff0c;需要先引入一个算法的库—— < algorithm >。需要说明的是&#xff0c;sort可以排序任何类型的元素&#xff0c;包括我们自己定义的结构体。 我们将需要在C文件的开始位置加上&#xff1a; #in…

Linux学习之认识操作系统

1.什么是操做系统&#xff1f; 操作系统实际上就是一个软件&#xff0c;是一个管理电脑硬件与软件资源的软件&#xff0c;同时也是计算机系统的内核与基石。 操作系统是一个庞大的管理控制程序&#xff0c;大致包括5个方面的管理功能&#xff1a;进程与处理机管理、作业管理、…

1. QEMU背景知识

QEMU的两种模拟方案&#xff1a; 系统模拟 System Simulation&#xff1a;可以简单的理解为对整个计算机系统进行模拟&#xff08;CPU、Memory等&#xff09; 用户模式模拟 User Mode Simulation&#xff1a;基于模拟方案执行特定应用程序 除了模拟功能外&#xff0c;QUME工具…