【Android】【Compose】Compose里面的Row和Column的简单使用

内容

Row和Column的简单使用方式和常用属性含义

Row

在 Jetpack Compose 中,Row 是一种用于在水平方向排列子元素的布局组件。它类似于传统 Android 中的 LinearLayout,但更加灵活和强大。

Row的代码

@Composable
inline fun Row(
    modifier: Modifier = Modifier,
    horizontalArrangement: Arrangement.Horizontal = Arrangement.Start,
    verticalAlignment: Alignment.Vertical = Alignment.Top,
    content: @Composable RowScope.() -> Unit
) {
    val measurePolicy = rowMeasurePolicy(horizontalArrangement, verticalAlignment)
    Layout(
        content = { RowScopeInstance.content() },
        measurePolicy = measurePolicy,
        modifier = modifier
    )
}
Row 的属性和用法
基本用法:
Row(
    modifier = Modifier.fillMaxWidth(),
    horizontalArrangement = Arrangement.SpaceBetween,
    verticalAlignment = Alignment.CenterVertically
) {
    // 子元素
}

modifier:用于指定 Row 的大小、填充方式等属性的修饰符。
horizontalArrangement:水平排列方式,例如 Arrangement.SpaceBetween 表示子元素之间均匀分布。
verticalAlignment:垂直对齐方式,例如 Alignment.CenterVertically 表示子元素在垂直方向上居中对齐。

子元素:

在 Row 的大括号内添加子元素,可以是任何支持 Compose 的组件,如 Text、Image、Button 等。

属性:
modifier:

修饰符,可以控制 Row 的大小、填充等。

horizontalArrangement:

控制子元素在水平方向的排列方式,常见的有:
Arrangement.Start:从开始位置对齐(默认)。
Arrangement.End:末尾对齐。
Arrangement.Center:居中对齐。
Arrangement.SpaceEvenly:均匀分布。
Arrangement.SpaceAround:子元素周围均匀分布空间。
Arrangement.SpaceBetween:子元素之间均匀分布。

verticalAlignment:

控制子元素在垂直方向上的对齐方式,常见的有:
Alignment.Top:顶部对齐。
Alignment.Bottom:底部对齐。
Alignment.CenterVertically:垂直居中对齐。
Alignment.CenterVertically:垂直居中对齐。
Alignment.Bottom:底部对齐。

示例:
Row(
    modifier = Modifier
        .fillMaxWidth()
        .padding(16.dp),
    horizontalArrangement = Arrangement.SpaceBetween,
    verticalAlignment = Alignment.CenterVertically
) {
    Text("Left Item")
    Spacer(modifier = Modifier.width(16.dp))
    Text("Right Item")
}

显示效果

在这里插入图片描述
这个示例中,两个 Text 组件会被放置在 Row 中,左边的文本会靠左对齐,右边的文本会靠右对齐,并且它们之间有一个 16dp 的空白间隔。

Column

在 Jetpack Compose 中,Column 是一种用于垂直排列子元素的布局组件,类似于传统 Android 中的 LinearLayout,但更为灵活和强大。

Column的代码

@Composable
inline fun Column(
    modifier: Modifier = Modifier,
    verticalArrangement: Arrangement.Vertical = Arrangement.Top,
    horizontalAlignment: Alignment.Horizontal = Alignment.Start,
    content: @Composable ColumnScope.() -> Unit
) {
    val measurePolicy = columnMeasurePolicy(verticalArrangement, horizontalAlignment)
    Layout(
        content = { ColumnScopeInstance.content() },
        measurePolicy = measurePolicy,
        modifier = modifier
    )
}
Column 的属性和用法
基本用法:
Column(
    modifier = Modifier.fillMaxSize(),
    verticalArrangement = Arrangement.Center,
    horizontalAlignment = Alignment.CenterHorizontally
) {
    // 子元素
}

modifier:用于指定 Column 的大小、填充方式等属性的修饰符。
verticalArrangement:垂直排列方式,例如 Arrangement.Center 表示子元素在垂直方向上居中排列。
horizontalAlignment:水平对齐方式,例如 Alignment.CenterHorizontally 表示子元素在水平方向上居中对齐。

子元素:

在 Column 的大括号内添加子元素,可以是任何支持 Compose 的组件,如 Text、Image、Button 等。

属性:
modifier:

修饰符,可以控制 Column 的大小、填充等。

verticalArrangement:

控制子元素在垂直方向上的排列方式,常见的有:
Arrangement.Top:顶部对齐。
Arrangement.Bottom:底部对齐。
Arrangement.Center:垂直居中对齐。
Arrangement.SpaceEvenly:均匀分布。
Arrangement.SpaceAround:子元素周围均匀分布空间。
Arrangement.SpaceBetween:子元素之间均匀分布。

horizontalAlignment:

控制子元素在水平方向上的对齐方式,常见的有:
Alignment.Start:开始位置对齐(默认)。
Alignment.End:末尾对齐。
Alignment.CenterHorizontally:水平居中对齐。
Alignment.CenterHorizontally:水平居中对齐。

示例:
Column(
    modifier = Modifier
        .fillMaxSize()
        .padding(16.dp),
    verticalArrangement = Arrangement.Center,
    horizontalAlignment = Alignment.CenterHorizontally
) {
    Text("Top Item")
    Spacer(modifier = Modifier.height(16.dp))
    Text("Middle Item")
    Spacer(modifier = Modifier.height(16.dp))
    Text("Bottom Item")
}
显示效果

在这里插入图片描述

区别
Column:

垂直排列:Column 主要用于垂直方向上排列子元素。
默认排列方式:子元素从上到下依次排列。
属性:可以设置垂直对齐方式 (verticalArrangement),控制子元素在垂直方向上的布局方式,例如居中、顶部对齐、底部对齐等。
示例应用:适合于垂直列表或者页面上垂直排列的 UI 元素。

Row:

水平排列:Row 主要用于水平方向上排列子元素。
默认排列方式:子元素从左到右依次排列。
属性:可以设置水平对齐方式 (horizontalArrangement),控制子元素在水平方向上的布局方式,例如居中、左对齐、右对齐等。
示例应用:适合于水平列表或者页面上水平排列的 UI 元素。

共同点:

子元素:两者的子元素可以是任何支持 Compose 的 UI 组件,例如 Text、Image、Button 等。
修饰符:都支持使用 modifier 设置大小、填充和其他样式属性。
灵活性:都可以嵌套使用,例如在一个 Column 中放置一个或多个 Row,以实现复杂的布局结构。

和传统的 LinearLayout 对比
声明式 UI:

Compose:Jetpack Compose 是一种声明式 UI 框架,通过 Kotlin 代码描述 UI 的结构和行为,而不是像传统的 XML 布局文件。这种方式更加灵活,使得 UI 的构建和修改更加直观和便捷。
LinearLayout:LinearLayout 是 Android 原生布局系统中的一部分,通过 XML 文件描述 UI 结构和属性,具有一定的静态性,修改布局结构和属性相对复杂。

性能优化:

Compose:Jetpack Compose 提供了基于函数式响应式编程的 UI 更新机制,能够更高效地处理 UI 的重绘和局部更新,以确保性能的最大化。
LinearLayout:在传统的 Android 开发中,布局的重绘和更新机制可能相对复杂,需要开发者手动管理视图的状态和更新。

布局属性:

Compose:Column 和 Row 通过函数式 API 提供了更丰富和灵活的布局属性和修饰符,例如 modifier 和对齐方式的指定,使得布局更加可控和可定制。
LinearLayout:LinearLayout 通过 XML 的属性来控制子元素的排列方式和对齐方式,相对于 Compose 的代码方式来说,灵活性较低。

组合性和可重用性:

Compose:Compose 提倡组合和可重用性,可以通过自定义组件和组合多个小组件来构建复杂的 UI 结构,使得代码更具可维护性和可扩展性。
LinearLayout:传统的 LinearLayout 也支持布局的组合和嵌套,但相较于 Compose 的函数式组合方式来说,复用和灵活性有所限制。

Jetpack Compose 对于有传统 Android 开发经验的开发者来说可能确实会有一些不适应的感觉,但是感觉以后Compose应该是一种大势所趋吧,不学是不行的,慢慢来学习吧,Jetpack Compose 是一种全新的声明式 UI 框架,与传统的基于 XML 的布局系统截然不同。它采用了函数式编程的方式来描述 UI,这需要习惯于用代码而不是 XML 来构建和定义界面。
对于习惯了 XML 布局和 View 控制的人来说,这种范式转变可能需要一定的时间和适应过程。当初学习kotlin的时候也是这样,很不习惯这样的写法。感觉现在学习Compose的一个问题就是,公司根本不用,嘿嘿。

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

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

相关文章

小九首度回应与小水分手传闻揭秘

#小九首度回应!与小水分手传闻揭秘#近日,泰国娱乐圈掀起了一股热议的狂潮!传闻中的“金童玉女”组合——“小水”平采娜与“小九”NINE疑似分手的消息,如同巨石投入平静的湖面,激起了千层浪花。而在这股狂潮中&#xf…

高效同步的PWM升压DC/DC转换器 SD6201/SD6201-AF

SD6201是高效同步的PWM升压DC/DC转换器优化为介质提供高效的解决方案电力系统。这些设备在输入电压介于0.9V和4.4V之间,带有1.4MHz固定频率切换。这些功能通过允许使用小型、薄型电感器以及陶瓷电容器。自动PWM/PFM轻负载下的模式切换可节省电力提高了效率。电压在2…

武汉星起航:挂牌上海股权托管交易中心,亚马逊影响力再掀波澜

在全球化日益加深的今天,跨境电商行业正迎来前所未有的发展机遇。而在这个风起云涌的时代,武汉星起航电子商务有限公司以其卓越的实力和前瞻性的战略眼光,成功在上海股权托管交易中心挂牌展示,正式登陆资本市场,这一重…

CSS的媒体查询:响应式布局的利器

关于CSS的媒体查询 CSS媒体查询是CSS层叠样式表(Cascading Style Sheets)中的一个核心功能,它使得开发者能够根据不同的设备特性和环境条件来应用不同的样式规则。这是实现响应式网页设计的关键技术,确保网站或应用能够在多种设备上,包括桌面…

提升用户转化率秘诀!Xinstall的H5拉起应用技术让您领先一步!

在移动互联网时代,App的推广和运营面临着诸多挑战。其中,H5页面如何高效、便捷地拉起应用,成为了一个亟待解决的问题。今天,我们就来谈谈如何利用Xinstall品牌,轻松解决这一痛点,提升用户体验,助…

CentOS 7.9 CDH6.3.2集群生产环境实战部署指南

一、环境准备 1、系统环境: # cat /etc/os-release 2、准备工作: 部署资源分配 节点centos 7.9(生产)节点规划Postgresql部署组件备注pgsql32c、128G、2TB国产数据库Postgresql(翰高)可根据实际情况调整…

启动台出现agent app的解决方法~

启动台出现agent app的解决方法~ 如果用了战网,Battle.net,在卸载后有一个agent app,启动台删除不掉,应用程序里面没有,怎么办呢? 解决方法:找到这个app所在位置,可以通…

Facebook之梦:数字社交的无限可能

在当今数字化和全球化的时代,社交网络已经成为人们日常生活不可或缺的一部分。作为全球最大的社交平台之一,Facebook不仅连接了数十亿用户,还深刻影响了我们的社交方式、文化交流和信息传播。然而,Facebook所代表的不仅仅是一个网…

深入理解 Dubbo:分布式服务框架的核心原理与实践

目录 Dubbo 概述Dubbo 的架构Dubbo 的关键组件 服务提供者(Provider)服务消费者(Consumer)注册中心(Registry)监控中心(Monitor)调用链追踪(Trace) Dubbo 的…

【Java】字节数组 pcm 与 wav 格式互转 (附原理概述)

前言 最近实现了一个文字转语音的功能,语音引擎返回的是pcm格式的数据。需要转化成wav格式前端才能播放。本文首先会给出解决方案,后续会讲背后的原理。 场景 git 仓库 https://github.com/ChenghanY/pcm-wav-converter 1. pcm wav 转化工具类 入参和…

MES管理系统的实施难点以及解决方案

随着智能制造的浪潮席卷全球,MES管理系统成为了众多制造企业提升竞争力的关键武器。MES管理系统以其强大的功能,能够有效连接企业的上层ERP系统与底层自动化设备,实现生产过程的实时监控与优化。然而,实施MES管理系统并非一帆风顺…

Linux通用系统高危漏洞(CVE-2024-1086)修复案例

一、漏洞描述 2024年3月28日, Linux kernel权限提升漏洞(CVE-2024-1086)的PoC/EXP在互联网上公开,该漏洞的CVSS评分为7.8,目前漏洞细节已经公开披露,美国网络安全与基础设施安全局(CISA&#x…

springboot框架使用Netty依赖中解码器的作用及实现详解

在项目开发 有需求 需要跟硬件通信 也没有mqtt 作为桥接 也不能http 请求 api 所以也不能 json字符串这么爽传输 所以要用tcp 请求 进行数据交互 数据还是16进制的 写法 有帧头 什么的 对于这种物联网的这种对接 我的理解就是 我们做的工作就像翻译 把这些看不懂的 字节流 变成…

深圳技术大学oj C : 生成r子集

Description 输出给定序列按字典序的 � 组合,按照所有 � 个元素出现与否的 01 标记串 ����−1,...,�1 的字典序输出. 此处01串的字典序指:先输入的数字对应低位&#x…

SOBEL图像边缘检测器的设计

本项目使用FPGA设计出SOBEL图像边缘检测器,通过分析项目在使用过程中的工作原理和相关软硬件设计进行分析详细介绍SOBEL图像边缘检测器的设计。 资料获取可联系wechat 号:comprehensivable 边缘可定义为图像中灰度发生急剧变化的区域边界,它是图像最基本…

Rust 跨平台-Android 和鸿蒙 OS

1. 安装 rustup rustup 是 Rust 的安装和版本管理工具 $ curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh 该命令会安装 rusup 和最新的稳定版本的 Rust;包括: rustc Rust 编译器,用于将 Rust 代码编译成可执行文件或库。 ca…

记录在Linux(龙蜥8.6)配置jdk环境变量不生效问题

在Linux中,将jdk解压至 /opt/soft/jdk 目录中,使用root用户配置在/etc/profile中配置环境变量并source后,使用root用户是正常的,但是切换到普通用户后提示: 这个问题是普通用户对 /opt/soft/jdk 目录无执行权限 解决&…

【精选】数据治理项目实施(合集)05——解码“数据架构”,数据架构包含哪些内容?

上一篇讲到了数据治理项目的前期调研工作,继数据调研工作完成之后,就要开始关于治理工作的各项方案设计,整体方案设计包括数据架构、元数据、主数据、数据质量、数据安全、指标标签体系、数据生命周期管理和管理评价等内容。这一篇重点讲一下…

4面体空间内直链4点结构分布与占比

在30个点的4面体空间内取4个点,有30*29*28*27/2427405种取法,要求得到的4个点必须在直链上。只有144个结构符合要求,在平移操作下不重合的结构有36个。 这36个结构可以按照旋转对称性进一步分成3组0,1,4,每…

SaaS客户裂变:如何构建合作伙伴的双向沟通桥梁

在SaaS行业中,客户裂变不仅是增长的关键,更要求与合作伙伴之间建立稳固的沟通桥梁。如何构建合作伙伴双向沟通的桥梁,真正做到理解对方的价值需求,实现长期合作共赢呢? 一、明确价值共享 首先,确保双方明…