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

news2024/11/17 22:41:38
内容

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的一个问题就是,公司根本不用,嘿嘿。

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

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

相关文章

马斯克的SpaceX星舰有多牛?我们离殖民火星还有多远?

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 埃隆马斯克是一位知名的企业家和工程师,他掌握着多家公司,涉及多个领域,包括电动汽车、太空探索、太阳能、脑…

钉钉在MAKE 2024大会上宣布开放AI生态;NBC将用AI主播播报巴黎奥运会内容

🚀 钉钉在MAKE 2024大会上宣布开放AI生态 摘要:钉钉总裁叶军在MAKE 2024生态大会上宣布,钉钉将对所有大模型厂商开放,构建“国内最开放AI生态”。目前已有六家大模型厂商接入钉钉,用户可直接使用七家大模型产品。未来…

无人机赋能空间规划

城乡规划 高效构建实景三维模型,直 观反映地貌与建筑信息,辅 助设计人员进行科学规划。 业务挑战 BIM设计图、道路矢量图、卫星影像图无法进行精准匹配 传统测绘方式获得的二维图无法展示三维环境信息 BIM设计图与实景模型差异大,规划效…

Taro +vue3 中的微信小程序中的分享

微信小程序 右上角分享 的触发 以及配 useShareAppMessage(() > {return {title: "电影属全国通兑券",page: /pages/home/index,imageUrl: "http:///chuanshuo.jpg",};}); 置 就是Taro框架中提供的一个分享Api 封装好的

MQTT遗嘱信息(1)

本文内容参考: 什么是MQTT遗嘱消息?如何配置和处理遗嘱消息?_mqtt last will-CSDN博客 【MQTT基础篇(十五)】MQTT遗嘱_last-will qos-CSDN博客 MQTT 协议学习:Retained(保留消息)…

【Python实战】零基础实战教程(一) Hello World!

【Python实战】零基础Python实战教程 一、前言二、官方 Python3.12 版本安装教程1、下载2、安装3、测试 三、安装 Python 编译器1、下载2、安装3、启动 四、Hello World!1、创建项目2、创建 hellow_world.py 文件3、在控制台打印 Hellow World! 一、前言 由于公司新…

期货的杠杆怎么计算?

什么是杠杆系数 杠杆系数是指期货合约价值与保证金之间的比例。它表示投资者只需投入少量资金,就可以控制价值更高的期货合约。杠杆系数越高,投资者的资金放大倍数就越大,但风险也越大。 什么是期货保证金呢? 期货保证金&…

微前端框架是为了解决项目应用在大型项目中带来的复杂性和维护难题而提出的技术方案。

微前端框架是为了解决单页应用(SPA)在大型项目中带来的复杂性和维护难题而提出的技术方案。Qiankun.js、MicroApp 和 Wujie 是三种流行的微前端框架。以下是对这三种框架的优缺点分析: Qiankun.js 优点 成熟度高:Qiankun.js 基…

麦克风什么牌子的音质效果好?揭秘领夹麦克风哪个牌子音质好

近年来,随着网络直播、短视频、网课等新兴行业的兴起,大家对麦克风的需求量不断增加。而领夹麦克风作为一种轻便、便携的录音设备,也是得到了广大用户的青睐。一款优质的领夹麦克风能够带来更清晰、更真实的声音效果,让我们在在各…

SAP ABAP 常用实用类

文章目录 前言一、输出 展示 数据信息 a.将 JSON 格式化为可读 并以弹框形式输出 b.将内表内容以表格形式输出 c.弹框形式显示 HTML 内容。也能显示包含js 的html。也可以显示pdf 图片 二、输入 获取 数据信息 a.弹框 添加 输入框…

python e怎么表示

exp()方法返回x的指数,ex。 语法 以下是 exp() 方法的语法: import math math.exp( x ) 注意:exp()是不能直接访问的,需要导入 math 模块,通过静态对象调用该方法。 参数 x -- 数值表达式。 返回值 返回x的指数,…

怎样恢复数据?原来只要3个方法,真是救大命了

无论是工作文件,还是个人的照片、视频,手机数据都承载着我们的记忆和努力。但如果不小心删除了,我们该怎样恢复数据呢?其实,恢复数据并不是一件复杂的事情,只要掌握正确的方法,我们就能有效地找…

Amazon Q:对话智能赋能企业发展

在最近举办的亚马逊云科技大会上,引人瞩目的消息是 Amazon Q 的推出,这是一款专注于生成式 AI 支持的新型助手。与其他智能助手相比,Amazon Q 助手聚焦在办公场景,具有针对性,旨在提供更为准确和个性化的服务。 一、Am…

TikTok短视频矩阵系统

随着数字化时代的到来,短视频已成为人们获取信息、娱乐消遣的重要渠道。TikTok,作为全球最受欢迎的短视频平台之一,其背后的短视频矩阵系统是支撑其成功的关键因素。本文将深入探讨TikTok短视频矩阵系统的构成、功能以及它在新媒体时代中的影…

面试-Java线程池

1.利用Excutors创建不同的线程池满足不同场景的需求 分析: 如果并发的请求的数量非常多,但每个线程执行的时间非常短,这样就会频繁的创建和销毁线程。如此一来,会大大降低系统的效率。 可能出现,服务器在为每个线程创建…

【Python实战因果推断】2_因果效应异质性2

目录 CATE with Regression Evaluating CATE Predictions CATE with Regression 我想你可能已经预料到了:与应用因果推理中的大多数情况一样,答案往往从线性回归开始。但在走这条路之前,让我们把事情变得更具体一些。假设你在一家遍布全国的…

python API自动化(Pytest+Excel+Allure完整框架集成+yaml入门+大量响应报文处理及加解密、签名处理)

1.pytest数据参数化 假设你需要测试一个登录功能,输入用户名和密码后验证登录结果。可以使用参数化实现多组输入数据的测试: 测试正确的用户名和密码登录成功 测试正确的用户名和错误的密码登录失败 测试错误的用户名和正确的密码登录失败 测试错误的用户名和密码登…

NoSQL之Redis配置与管理

目录 一、关系型数据库和非关系型数据库 1.关系型数据库 2.非关系型数据库 3.关系型数据库和非关系型数据库区别 二、Redis 1.Redis简介 2.Redis 的优点 3.Redis 使用场景 4.Redis的数据类型 5.哪些数据适合放入缓存中? 6.Redis为什么这么快?…

Uniapp的使用

为什么要使用uniapp uniapp 可以进行多端开发,uniapp 在设计的时候就拥有许多兼容性代码,可以兼容很多的平台 如 支付宝小程序 html页面 微信小程序等,注重开发效率而不是运行效率时 ,就可以考虑一下 uniapp 当然也可以去…

08 元组和集合

目录 一、元组(tuple) 1. 什么是元组 2. 查操作 3. 函数和方法 二、集合(set) 1. 什么是集合 2. 数学集合运算 一、元组(tuple) 1. 什么是元组 元组是容器型数据类型,将( )作为容器的标…