Android jetpack compose 组件学习

官网地址:https://developer.android.com/jetpack/compose/tutorial?hl=zh-cn

一、写一个 hello world

在New Project的时候选择Photo and Tablet里的Empty Compose Activity,如下所示:

打开这个project之后,可以看到MainActivity的代码如下:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            ComposeTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colors.background
                ) {
                    Greeting("Android")
                }
            }
        }
    }
}

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

@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
    ComposeTheme {
        Greeting("Android")
    }
}

直接运行在手机上,可以看到显示一个Hello Android的画面

然后我们尝试修改一行,来显示我们自己要显示的内容

package com.example.compose

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material.Text
import androidx.compose.runtime.Composable

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MessageCard(name = "Tom")
        }
    }
}

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

在屏幕上就会显示一个Hello Tom

这就完成了Compose的第一个hello world。

上述代码中,用的@Composable注解,让其成为了一个可组合函数。

接着,借助 @Preview 注解,可以在 Android Studio 中预览可组合函数,而无需构建应用并将其安装到 Android 设备或模拟器中。该注解必须用于不接受参数的可组合函数。因此,无法直接预览 MessageCard 函数,而是需要创建另一个名为 PreviewMessageCard 的函数,由该函数使用适当的参数调用 MessageCard。

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

如图所示:这个时候就可以在右边看到预览的样子

二、布局

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MessageCard(BookMessage("Android", "Jetpack Compose"))
        }
    }
}

data class BookMessage(val author: String, val bookName: String)

@Composable
fun MessageCard(msg: BookMessage) {
    Column {
        Text(text = msg.author)
        Text(text = msg.bookName)
    }
}

@Preview
@Composable
fun PreviewMessageCard() {
    MessageCard(
        msg = BookMessage("余华", "活着")
    )
}

为了显示竖着的两个文本元素的信息,可以用Column来排列两个文本元素信息。

组一个横着的图片和文字布局

@Composable
fun MessageCard(msg: BookMessage) {
    Row {
        Image(
            painter = painterResource(R.drawable.data_analyse),
            contentDescription = "Contact profile picture",
        )
        Column {
            Text(text = msg.author)
            Text(text = msg.bookName)
        }
    }
}

显示效果如下:

修改一下图片的样式和文字的样式

@Composable
fun MessageCard(msg: BookMessage) {
    Row {
        Image(
            painter = painterResource(R.drawable.data_analyse),
            contentDescription = "Contact profile picture",
            modifier = Modifier.size(100.dp).clip(CircleShape)
        )
        Spacer(modifier = Modifier.width(8.dp))
        Column {
            Text(text = msg.author, fontSize = 40.sp, fontWeight = FontWeight.Bold)
            Spacer(modifier = Modifier.width(10.dp))
            Text(text = msg.bookName, fontSize = 40.sp, fontWeight = FontWeight.Bold)
        }
    }
}

效果如下:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WebSocket魔法师:打造实时应用的无限可能

1、背景 在开发一些前端页面的时候,总是能接收到这样的需求:如何保持页面并实现自动更新数据呢?以往的常规做法,是前端使用定时轮询后端接口,获取响应后重新渲染前端页面,这种做法虽然能达到类似的效果&…

RPC 框架 openfeign 介绍和学习使用总结

一、基本概念 RPC 远程过程调用(Remote Procedure Call)的缩写形式 Birrell 和 Nelson 在 1984 发表于 ACM Transactions on Computer Systems 的论文《Implementing remote procedure calls》对 RPC 做了经典的诠释。 RPC 是指计算机 A 上的进程&am…

这个平台竟然几秒就可以做出精致的翻页电子画册?

电子画册是现代人生活不可或缺的一部分,它美观大方,二次编辑方便,而且相比于传统纸质画册,电子画册还能够让你拥有更丰富的互动性和视觉体验。如何制作呢? 小编这里要给大家安利的平台是:FLBOOK&#xff0…

腾讯云2023年双11活动:云服务器1.8折起,还可领取9999元代金券!

2023年双11腾讯云推出了11.11云上盛惠大促活动,包括秒杀专区、服务器买赠、新人专区、代金券专区、境外优选、新老同享、续费专区以及热门上云场景等满足新用户、老用户、企业用户对云计算服务的各种需求。 一、腾讯云双11活动地址 活动入口:点此直达 …

vue同时校验多个表单

0 效果 1 代码 checkForm (formRef) {return new Promise((resolve, reject) > {this.$refs[formRef].validate((valid) > {if (valid) {resolve();} else {setTimeout(() > {this.$refs[formRef].clearValidate();reject(new Error(错误));}, 1500);}});}); }, conf…

达梦SQL语法兼容笔记

1. DDL工具语法 查看库和表列表 # 查看所有数据库 select distinct object_name from all_objects where object_typeSCH; # 查看所有可见的表名: SELECT table_name FROM all_tables; # 查看用户可见的所有表 SELECT table_name FROM all_tables WHERE owner s…

STM32H743XX/STM32H563XX芯片烧录一次后,再次上电无法烧录

近期在使用STM32H563ZIT6这款芯片在开发板上使用正常,烧录到自己打的板子就遇到了芯片烧录一次后,再次上电无法烧录的问题。 遇到问题需要从以下5点进行分析。 首先看下开发板的原理图 1.BOOT0需要拉高。 2.NRST脚在开发板上是悬空的。这里我建议大家…

算法打卡02——删除有序数组中的重复项

题目:删除有序数组中的重复项 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑…

C4D vs Blender:哪个更适合你的需求?

对于初学者来说,选择合适的 3D 制作软件往往是一件很困扰的事情。近年来,C4D 和 Blender 成为了许多动画和 3D 建模爱好者的热门选择。那么,这两款软件各有什么特色呢?让我们一起来看看吧! 一、软件特色 C4D 是一款商…

若依框架升级(对若依框架进行了升级,升级为Mybatis-plus)

ruoyi-plus: 对若依进行了升级Mybatis-plus版https://gitee.com/xiao--yan/ruoyi-plus.git

【UE5】 虚拟制片教程

目录 效果 步骤 一、下载素材 二、将视频转成PNG序列 三、开始虚拟制片 效果 步骤 一、下载素材 首先下载绿幕视频素材 链接:百度网盘 请输入提取码 提取码:jyfk 二、将视频转成PNG序列 打开“Adobe Premiere Pro”,导入素材 …

绿色低碳 数字未来-辽宁省建筑电气2023年学术年会-安科瑞 蒋静

2023年8月18日,辽宁省建筑电气2023年学术年会在辽宁友谊国宾馆成功召开。本届大会以“绿色低碳 数字未来”为主题,着眼为辽宁省建设提供智慧化电气设计及高质量产品服务。 安科瑞围绕“绿色低碳 数字未来”的主题,携充电桩及运营管理平台、工…

亚数受邀参加第六届进博会配套论坛,获评“2023年度上海重点产业提升国际竞争力示范案例”!

11月8日,由上海市商务委指导,上海社科院和临港集团主办,上海社科院应用经济研究所、徐汇虹梅街道和上海市漕河泾新兴技术开发区开发总公司联合承办,长三角产业国际竞争力联盟协办的第六届中国国际进口博览会提升上海产业国际竞争力…

ssm+vue的项目管理平台(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的项目管理平台(有报告)。Javaee项目,ssm vue前后端分离项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 项目介绍…

xcorr函数的用法和程序举例

xcorr函数的用法和程序举例 xcorr函数返回两个离散时间序列的互相关。互相关测量向量 x 和移位(滞后)副本向量y 的之间的相似性,形式为滞后的函数。如果 x 和 y 的长度不同,函数会在较短向量的末尾添加零,使其长度与另…

SpringBoot的bean属性校验

1.导入坐标 <!-- 导入JSR303规范--> <dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId> </dependency> 2.Validated 说明&#xff1a;开启对当前bean的属性注入校验 package com.…

arm2 day4

汇编编写流水灯 代码&#xff1a; LED流水灯现象&#xff1a;

tomcat+idea--如何在idea上发布项目

对应于idea2022以后的版本 &#xff08;一&#xff09;如何配置idea上的tomcat&#xff1f; 1、新建一个项目&#xff0c;左上角File&#xff0c;new&#xff0c;project&#xff0c;新建后就和普通的java项目一样。 2、然后点击项目名&#xff0c;右键选择“Add framework s…

Redis数据类型之List类型

文章目录 简介常用命令赋值语法LPUSHRPUSHLPUSHXRPUSHX 取值语法LLENLINDEXLRANGE 删除语法LPOPRPOPBLPOPBRPOPLTRIMLREM 修改语法LSETLINSERT 高级命令RPOPLPUSH 应用场景 简介 List类型是一个链表结构的集合&#xff0c;其主要功能有push&#xff0c;pop&#xff0c;获取元素…

服务器往客户端发送字符串的网络编程

服务器主要就是能够打开命令行提供的网络端口&#xff0c;然后一有客户端连接上&#xff0c;就会向客户端发送Welcome to Our Server!这段话。 服务器代码serverSayWelcome.c的代码如下&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.…
最新文章