Jetpack Compose 第 2 课:布局

点击查看:Jetpack Compose 教程
点击查看:Composetutorial 代码

简介

Jetpack Compose 是用于构建原生 Android 界面的新工具包。它使用更少的代码、强大的工具和直观的 Kotlin API,可以帮助您简化并加快 Android 界面开发。

在本教程中,您将使用声明性的函数构建一个简单的界面组件。您无需修改任何 XML 布局,也不需要使用布局编辑器。相反,您只需调用可组合函数来定义所需的元素,Compose 编译器即会完成后面的所有工作。

布局

界面元素采用多层次结构,元素中又包含其他元素。在 Compose 中,您可以通过从可组合函数中调用其他可组合函数来构建界面层次结构。

添加多个文本

到目前为止,您已经构建了第一个可组合函数和预览!为探索更多 Jetpack Compose 功能,您将构建一个简单的消息界面,界面上显示可以展开且具有动画效果的消息列表。

首先,通过显示消息发送者和消息内容,使消息可组合项更丰富。您需要先将可组合参数更改为接受 Message 对象(而非 String),然后在 MessageCard 可组合项中添加另一个 Text 可组合项。请务必同时更新预览。

这段代码会在内容视图中创建两个文本元素。不过,由于您未提供有关如何排列这两个文本元素的信息,因此它们会相互重叠,使文本无法阅读。

效果图
在这里插入图片描述

使用 Column

Column 函数可让您垂直排列元素。向 MessageCard 函数中添加一个 Column。
您可以使用 Row 水平排列各项,并使用 Box 堆叠元素。

添加图片元素

下面我们来添加消息发送者的个人资料照片,以丰富消息卡片。使用 Resource Manager 从照片库中导入图片,或使用这张图片。添加一个 Row 可组合项,以实现良好的设计结构,并向该可组合项中添加一个 Image 可组合项。

配置布局

您的消息布局拥有良好的结构,但其元素的间距不合理,并且图片过大!为了装饰或配置可组合项,Compose 使用了修饰符。通过修饰符,您可以更改可组合项的大小、布局、外观,还可以添加高级互动,例如使元素可点击。您可以将这些修饰符链接起来,以创建更丰富的可组合项。您将使用其

效果图
在这里插入图片描述

Base02.kt代码

package com.example.composetutorial.activityimport android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.example.composetutorial.R/*Jetpack Compose 教程
https://developer.android.google.cn/jetpack/compose/tutorial*/
class Base02 : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {MessageCard2(Message("Android", "Jetpack Compose"))}}/*第 2 课:布局界面元素采用多层次结构,元素中又包含其他元素。在 Compose 中,您可以通过从可组合函数中调用其他可组合函数来构建界面层次结构。添加多个文本
到目前为止,您已经构建了第一个可组合函数和预览!为探索更多 Jetpack Compose 功能,您将构建一个简单的消息屏幕,屏幕上显示可以展开且具有动画效果的消息列表。首先,通过显示发件人和消息内容,使消息可组合项更丰富。您需要先将可组合参数更改为接受 Message 对象(而非 String),然后在 MessageCard 可组合项中添加另一个 Text 可组合项。请务必同时更新预览。使用 Column
Column 函数可让您垂直排列元素。向 MessageCard 函数中添加一个 Column。
您可以使用 Row 水平排列项,并使用 Box 堆叠元素。添加图片元素
下面我们来添加发件人的个人资料照片,以丰富消息卡片。使用资源管理器从照片库中导入图片,或使用这张图片。添加一个 Row 可组合项,以实现良好的设计结构,并向该可组合项中添加一个 Image 可组合项。配置布局
您的消息布局拥有良好的结构,但其元素的间距不合理,并且图片过大!为了装饰或配置可组合项,Compose  使用了 Modifier 修饰符。通过修饰符,
您可以更改可组合项的大小、布局、外观,还可以添加高级互动,例如使元素可点击。您可以将这些修饰符链接起来,以创建更丰富的可组合项。您将使用其中一些修饰符来改进布局。*/}data class Message(val author: String, val body: String)@Composable
fun MessageCard1(msg: Message) {Text(text = msg.author, color = Color.White)Text(text = msg.body,  color = Color.White)
}@Composable
fun MessageCard2(msg: Message) {Row(modifier = Modifier.padding(all = 8.dp)) {//注意这里支持的图片格式 PNG, JPS, 不支持 webp格式;否则会报错  java.lang.IllegalArgumentException: Only VectorDrawables and rasterized asset types are supported ex. PNG, JPGImage(painter = painterResource(id = R.mipmap.icon_nav_mine),contentDescription = "启动图标",modifier = Modifier//修饰符.size(40.dp).clip(CircleShape))Spacer(modifier = Modifier.width(8.dp))Column {Text(text = msg.author)Spacer(modifier = Modifier.height(4.dp))//垂直分隔距离Text(text = msg.body)}}
}@Preview(showBackground = true)
@Composable
fun PreviewMessageCard02() {
//    MessageCard1(
//        msg = Message("Lexi", "Hey, take a look at Jetpack Compose, it's great!")
//    )MessageCard2(msg = Message("Lexi", "Hey, take a look at Jetpack Compose, it's great!"))
}

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

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

相关文章

PCB的介质损耗角是什么“∠”?

1、什么叫介质 介质是指在某种特定条件下能够传递力、能量或信息的物质或者空间。在物理学和工程学中,介质通常是指固体、液体或气体,它们能够传递机械波、电磁波等。例如,在声学中,空气、水和固体都可以作为声波的传播介质&…

sora的理解

1、背景 近期, openai紧跟Runway、 Google、Meta等公司, 发布了视频生成模型Sora, 全面进军视频领域。官网的视频效果炸裂,连贯性优秀,生成视频时长可达60秒,但模拟复杂物理场景仍有瑕疵。相对Pika、Runway的效果还是有进一步提升。考虑到这…

SQL补充2:数据库的增操作

数据库的增操作 数据库的增操作主要涉及数据库的增加、数据表的增加、表记录增加以及表字段增加等: 数据库的增加非常简单,就是新创建一个数据库;表记录的增加指的就是新增表的数据行,可以是在已有表的基础上增加记录&#xff0…

基于SSM的电影购票系统(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的电影购票系统(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring Spri…

Pandas.DataFrame.cumprod() 累积乘积 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本: 本文基于 pandas2.2.0 编写。 关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。 传送门: Pandas API参考目录 传送门: Pandas 版本更新及新特性 传送门&…

【c++ debug】记一次protobuf结构相关的coredump问题

文章目录 1. 问题现象2. 问题描述3. 问题分析4. 问题根因5. 问题修复6. 补充:类成员变量定义为引用类型 1. 问题现象 其中curr_lanes是一个目标上一帧的当前车道current_lanes_curr_lane是lane_id对应的LaneInfo信息现象:在lane_info->lane().success…

四川古力未来科技公司抖音小店:靠谱的新电商之旅

随着互联网的飞速发展,电商行业日新月异,新兴平台如抖音小店正成为消费者新的购物天堂。在众多抖音小店中,四川古力未来科技公司的店铺以其独特的魅力吸引了众多消费者的目光。那么,四川古力未来科技公司抖音小店到底靠不靠谱呢&a…

Java并发基础:ConcurrentSkipListSet全面解析!

内容概要 ConcurrentSkipListSet类在多线程环境下,它能够轻松应对大量的插入、删除和查找操作,同时保持数据的完整性和一致性,其内部基于跳表数据结构的实现,确保了即使在处理大规模数据时,也能具有出色的性能表现。 …

现在学鸿蒙有前途吗?能找到工作?

2024年可以说是布道鸿蒙开发行业的最佳时机,华为鸿蒙在2023年末宣布了纯血鸿蒙的问世。这一信息已经引起业界很大关注。 鸿蒙2024年初,在千帆启航仪式会中,宣布了星河版并对开发者开放申请。发布会中表示,已有200家头部企业加入原…

2024.2.18

使用fgets统计给定文件的行数 #include<stdio.h> #include<string.h> int main(int argc, const char *argv[]) {FILE *fpNULL;if((fpfopen("./test.txt","w"))NULL){perror("open err");return -1;}fputc(h,fp);fputc(\n,fp);fput…

java根据前端所要格式返回树形3级层级数据

一、业务分析&#xff0c;根据前端需求返回如下数据格式 二、后端设计数据类型VO /*** author TTc* version 1.0* date 2024/2/15 16:47*/ Data AllArgsConstructor NoArgsConstructor public class Catalog2Vo {/*** 一级父分类的 id*/private String catalog1Id;/*** 三级子…

迪杰斯特拉算法

迪杰斯特拉算法&#xff08;Dijkstras Algorithm&#xff09;&#xff1a; 由来&#xff1a; 迪杰斯特拉&#xff08;Dijkstra&#xff09;算法是由荷兰计算机科学家艾兹赫尔戴克斯特拉&#xff08;Edsger W. Dijkstra&#xff09;在1956年提出的一种解决带权有向图中单源最短…