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.rhkb.cn/news/259321.html

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

相关文章

Quartz---基础

1.概述 Quartz是一个完全由Java编写的开源任务调度框架,通过触发器来设置作业定时运行规则,控制作业的运行时间。Quartz框架的主要核心组件包括调度器、触发器和作业。调度器作为作业的总指挥,触发器作为作业的操作者,而作业则为应…

前端常见的设计模式

说到设计模式,大家想到的就是六大原则,23种模式。这么多模式,并非都要记住,但作为前端开发,对于前端出现率高的设计模式还是有必要了解并掌握的,浅浅掌握9种模式后,整理了这份文章。 六大原则&…

【图像分割 2023 WACV】HiFormer

【图像分割 2023 WACV】HiFormer 论文题目:HiFormer: Hierarchical Multi-scale Representations Using Transformers for Medical Image Segmentation 中文题目:HiFormer:基于Transformer的分层多尺度表示医学图像分割 论文链接: 论文代码&a…

代码随想录算法训练营第三十四天|860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

860.柠檬水找零 链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 细节: 1. 首先根据题意就是只有5.的成本,然后就开始找钱,找钱也是10.和5. 2. 直接根据10 和 5 进行变量定义,然后去循环…

Vue3+Vite+TS+Pinia+ElementPlus+Router+Axios创建项目

目录 初始项目组成1. 创建项目1.1 下载项目依赖1.2 项目自动启动1.3 src 别名设置vite.config.ts配置文件tsconfig.json配置若新创项目ts提示 1.4 运行测试 2. 清除默认样式2.1 样式清除代码下载2.2 src下创建公共样式文件夹style2.3 main.js中引入样式2.4 安装sass解析插件 2.…

数据分析(一) 理解数据

1. 描述性统计(summary) 对于一个新数据集,首先通过观察来熟悉它,可以打印数据相关信息来大致观察数据的常规特点,比如数据规模(行数列数)、数据类型、类别数量(变量数目、取值范围…

剪辑视频衔接怎么操作 剪辑视频衔接过渡自然方法 剪辑视频教程新手入门 抖音剪辑短视频 会声会影视频制作教程

视频剪辑在现代社交媒体和数字媒体时代中变得越来越重要。它广泛应用于各种领域,包括电影制作、广告宣传、教育培训、社交媒体内容创作等。 一、剪辑视频衔接怎么操作 会声会影是一款功能强大、易于使用的视频编辑软件。接下来我们拿会声会影为例讲解剪辑视频如何…

这样讲话,可以减少95%的沟通问题

上一篇文章中,我们分享了沟通 3S 原则的第一点:简洁。 但是,仅仅有简洁,是不够的。简洁并不是我们沟通的目的,而只是方式。 沟通的目的是什么呢?是将信息高效地传达给对方,并在这过程中&#xf…

HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核内存管理-静态内存

目录 一、内存管理二、静态内存2.1、静态内存运行机制2.2、静态内存开发流程2.3、静态内存接口2.4、实例2.5、代码分析(待续...)坚持就有收货 一、内存管理 内存管理模块管理系统的内存资源,它是操作系统的核心模块之一,主要包括…

【Web】NSSCTF Round#18 Basic个人wp(部分)

目录 ①门酱想玩什么呢? ②Becomeroot ①门酱想玩什么呢? 先试一下随便给个链接 不能访问远程链接,结合评论区功能,不难联想到xss,只要给个评论区链接让门酱访问就可 我们研究下评论区 从评论区知道,要…

jsp计算机线上教学系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 计算机线上教学系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5…

计算机网络——11EMail

EMail 电子邮件(EMail) 3个主要组成部分 用户代理邮件服务器简单邮件传输协议:SMTP 用户代理 又名“邮件阅读器”撰写、编辑和阅读邮件输入和输出邮件保存在服务器上 邮件服务器 邮箱中管理和维护发送给用户的邮件输出报文队列保持待发…

ChatGPT重大升级:能自动记住用户的习惯和喜好,用户有权决定是否共享数据给OpenAI

OpenAI刚刚宣布了ChatGPT的一项激动人心的更新! OpenAI在ChatGPT中新加了记忆功能和用户控制选项,这意味着GPT能够在与用户的互动中记住之前的对话内容,并利用这些信息在后续的交谈中提供更加相关和定制化的回答。 这一功能目前正处于测试阶…

设计模式复习

单例模式 确保一个类最多只有一个实例,并提供一个全局访问点。 (某个类的对象有且仅有一个,单例的对象充当的是全局变量的角色,为什么在C里面不直接使用全局变量,而是使用单例来代替全局变量,因为如果直接…

Linux+Win双系统远程重启到Win

背景 电脑安装了双系统(ubuntu 22.04 win11),默认进入ubuntu系统。给电脑设置了WoL(Wake-on-LAN),方便远程开机远程控制。 但是ubuntu的引导程序grub无法远程控制,远程开机会默认进入ubuntu。 虽然说可以进入ubuntu后…

【后端高频面试题--设计模式下篇】

🚀 作者 :“码上有前” 🚀 文章简介 :后端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 后端高频面试题--设计模式下篇 往期精彩内容设计模式总览模板方法模式怎么理解模板方法模式模板方…

基于SpringBoot+WebSocket+Spring Task的前后端分离外卖项目-订单管理(十七)

订单管理 1. Spring Task1.1 介绍1.2 cron表达式1.3 入门案例1.3.1 Spring Task使用步骤1.3.2 代码开发1.3.3 功能测试 2.订单状态定时处理2.1 需求分析2.2 代码开发2.3 功能测试 3. WebSocket3.1 介绍3.2 入门案例3.2.1 案例分析3.2.2 代码开发3.2.3 功能测试 4. 来单提醒4.1 …

掌上新闻随心播控,HarmonyOS SDK助力新浪新闻打造精致易用的资讯服务新体验

原生智能是HarmonyOS NEXT的核心亮点之一,依托HarmonyOS SDK丰富全面的开放能力,开发者只需通过几行代码,即可快速实现AI功能。新浪新闻作为鸿蒙原生应用开发的先行者之一,从有声资讯入手,将基于Speech Kit朗读控件上线…

【Redis】深入理解 Redis 常用数据类型源码及底层实现(4.详解Hash数据结构)

Hash数据结构 看过前面的介绍,大家应该知道 Redis 的 Hash 结构的底层实现在 6 和 7 是不同的,Redis 6 是 ziplist 和 hashtable,Redis 7 是 listpack 和 hashtable。 我们先使用config get hash*看下 Redis 6 和 Redis 7 的 Hash 结构配置情况(在Redis客户端的命令行界面…

gem5学习(23):经典缓存——Classic Caches

目录 一、Interconnects 1、Crossbars 二、Debugging 默认缓存是一个带有MSHR(未命中状态保持寄存器)和WB(写缓冲区)的非阻塞缓存,用于读取和写入未命中。缓存还可以启用预取(通常在最后一级缓存中&…