Jetpack Compose - Row、Column

  • 0、介绍
  • 1、属性一览
  • 2、使用示例
  • 3、版本更新
  • 4、未解决问题

Compose系列文章,请点原文阅读。原文,是时候学习Compose了!

0、介绍

首先大致了解下这两个布局:

  • Row :水平布局,官方介绍如下

可以组合的布局,会将其子级 横向 进行放置。
如果需要 竖向 进行放置,请参考Column。
如果需要子级可以 横向滚动 ,请参考ScrollableRow。
如果需要只展示当前可见项 的 横向滚动列表请参考 LazyRow。

  • Column

可以组合的布局,会将其子级 竖向 进行放置。
如果需要 横向 进行放置,请参考Row。
如果需要子级可以 横向滚动 ,请参考ScrollableColumn。
如果需要只展示当前可见项 的 横向滚动列表请参考 LazyColumn。

所以根据官方介绍我们可以明确知道,Row和Column就是我们之前的LinearLayout,只不过官方细分了,直接分出来两个布局。 而且这两个布局没有滚动效果,当内容过长的时候会超出屏幕而无法看到内容项。

再多说一点,其实要想实现ScrollView的效果,就需要使用ScrollableXXX布局。要想实现RecyclerView的效果,就需要使用LazyXXX布局。

1、属性一览

【目前基于alpha08版本】请看Row布局支持的函数:

@Composable inline fun Row(modifier: Modifier = Modifier, horizontalArrangement: Arrangement.Horizontal = Arrangement.Start, verticalAlignment: Alignment.Vertical = Alignment.Top, content: RowScope.() -> Unit
): Unit

属性参数含义:

参数 含义
modifier: Modifier = Modifier 应用于布局的修饰符
horizontalArrangement: Arrangement.Horizontal = Arrangement.Start 布局子级的 水平 放置方式,默认从布局开始往布局结束方向放置
verticalAlignment: Alignment.Vertical = Alignment.Top 布局子级的 垂直 对其方式,默认从布局顶部对齐

再来看下Column布局的函数:

@Composable inline fun Column(modifier: Modifier = Modifier, verticalArrangement: Arrangement.Vertical = Arrangement.Top, horizontalAlignment: Alignment.Horizontal = Alignment.Start, content: ColumnScope.() -> Unit
): Unit

属性参数含义:

参数 含义
modifier: Modifier = Modifier 应用于布局的修饰符
verticalArrangement: Arrangement.Vertical = Arrangement.Top 布局子级的 竖直 放置方式,默认从布局顶部往布局底部方向放置
horizontalAlignment: Alignment.Horizontal = Alignment.Start 布局子级的 水平直 对其方式,默认从布局开始对齐

总结来说就是:
水平布局从横向开始往结束方向进行布局,然后其子级默认顶部对齐;
竖直布局从顶部开始往底部进行布局,然后其子级默认开始方向对其(为什么是Start和End而不是Left和Right,因为国际化的问题,我们国家的阅读方式是从左到右,但是有的国家却是从右到左,所以Left和Right这个概念就不适合了,因此需要使用Start和End概念)

2、使用示例

这两个布局属性基本类似,所以我们只使用Row布局来进行演示,我们在Row布局中,放置了两个简单的Box,布局,第一个是宽高200的红色框,第二个是宽高100的黄色框,代码如下:

@Composable
fun RowDemo() {Row(modifier = Modifier.fillMaxSize()) {Box(Modifier.width(200.dp).height(200.dp).background(Color.Red))Box(Modifier.width(100.dp).height(100.dp).background(Color.Yellow))}
}

实现效果如下所示:

然后设置Row的竖直方向对齐方式为竖直居中对齐: verticalAlignment = Alignment.CenterVertically,显示效果如下:

然后设置Row的水平布局方向为从 结束到开始 进行布局:
horizontalArrangement = Arrangement.End,再来看显示效果:
从之前的左侧贴着屏幕,到现在的右侧贴着屏幕。

还剩下一个重要的概念- 权重 ,什么意思呢,还拿上文的红黄框做讲解,Row的布局我们定义它是填充整个屏幕的,红黄框是横向排列的,如果我们不指定红黄框的宽度,而是指定红黄框所占的比重是1:1,那么横向上他们将各占Row布局宽度的一半,也就是说各占屏幕的一半,代码如下所示:

@Composable
fun RowDemo() {Row(modifier = Modifier.fillMaxSize(),) {Box(Modifier.height(200.dp).weight(1f).background(Color.Red))Box(Modifier.height(100.dp).weight(1f).background(Color.Yellow))}
}

效果如下所示:

3、版本更新

  • alpha 11
    在该版本,取消了ScrollableRow和ScrollableColumn函数,取而代之的是使用Modifier的相关属性来实现行或者列中超出内容的滚动效果。
    如下所示代码,当子级内容总宽度超过其最大宽度时,可以横向滚动查看超出的部分:
 @Composablefun RowDemo() {val scrollState = rememberScrollState()Row(modifier = Modifier.fillMaxSize().horizontalScroll(scrollState),) {}}

4、未解决问题

关于水平竖直的布局基本使用方式也就这些了,剩下的基本就是宽度或者高度超出屏幕的问题,需要使用ScrollableRow或者ScrollableColumn布局了,这个我们下文讲解。

Jetpack Compose - Row、Column相关推荐

  1. 计算机公式column,函数公式的左膀右臂:ROW、COLUMN函数知多少

    一个公式生成乘法口诀表 演示的公式中用到了两个函数:ROW和COLUMN,这两个函数的用途非常广泛,可以配合其他函数实现很多功能(尤其是和VLOOKUP函数),另外和这两个函数相似的还有ROWS和CO ...

  2. Flutter中Padding、Row 、Column 、Expanded 组件详解

    1. Paddiing 组件 在 html 中常见的布局标签都可以使用 padding 属性,但是 Flutter 中很多 Widget 是没有 padding 属 性,这个时候我们可以用 Paddi ...

  3. Jetpack Compose布局之Column

    基本使用 Column纵向线性布局,类似于LinearLayout设置为android:orientation="vertical"时的效果: Column() {Text(tex ...

  4. DDR的Controller、Channel、Chip、Rank、Bank、Row、Column、Sided、Dimm

    目录 概览 1.概览 先从半导体生产开始,生产出来还没切割的叫晶圆(wafer).切割出来还没封装的叫裸die(bare die).封装好的叫颗粒(component).做成内存条后叫模组(modul ...

  5. Jetpack Compose——remember、mutableStateOf、rememberSaveable

    1,mutableStateOf:标识这个data是有状态的,如果状态发生了改变,所有引用这个状态的View都需要重新绘制 2,remember:存储值,当界面重新绘制,会读取之前的值,相当于在mut ...

  6. 【Flutter从入门到实战】 ⑧、FlexWidget、Flex的主轴和交叉轴、Row和Column的使用、Expanded的FlexFit和flex的使用、Stack、Positioned的使用

    Flutter从入门到实战 一共分为23个系列 ①(Flutter.Dart环境搭建篇) 共3个内容 已更新 ②(Dart语法1 篇) 共4个内容 已更新 ③(Dart语法2 篇) 共2个内容 已更新 ...

  7. Jetpack Compose中的Modifier

    Modifier的基本使用 Modifier修饰符是Jetpack Compose中用来修饰组件的,提供常用的属性,写布局时几乎所有Composable组件的大部分属性都可以用Modifier 来修饰 ...

  8. Flutter Row和 Column 布局、线性布局概述

    更多文章请查看futter从入门 到精通 水平和垂直布局详解 在原生Android开发中,我们经常会用LinearLayout来达到水平或垂直方向的布局, 在原生IOS 开发中,水平或垂直方向的布局, ...

  9. Flutter 布局Row(水平方向布局)、Column(垂直方向布局)、Wrap(可以自动换行的布局)、Flex(弹性布局)、Stack(叠层布局)、

    1.线性布局 Row 水平方向布局 Row({... //表示水平方向子组件的布局顺序(是从左往右还是从右往左),//默认为系统当前Locale环境的文本方向(如中文.英语都是从左往右,而阿拉伯语是从 ...

最新文章

  1. 博客 | Machine Learning Yearning 要点笔记
  2. 小程序里的自定义组件:组件的外部样式externalClasses的使用
  3. 火星今天飞抵西非国家寻找埃博拉疫情
  4. 错误提示[__NSArrayI addObjectsFromArray:]: unrecognized selector的原因和解决方法
  5. dnf用虚拟机会被制裁吗_DNF: 神豪奶妈扬言, 战斗力没有超过他的, 都不配被加buff!...
  6. 载波聚合或双连接的方式进行_智能电表常用远程抄表方式,您想知道吗?--老兵聊电之...
  7. android layerlist bitmap,android shape类似的 另一个 高端用法:layer-list
  8. Python3爬虫反反爬之搞定同程旅游加密参数 antitoken
  9. cck8graphpad作图_Graphpad Prism 的 4 个隐藏技能助你轻松发表 SCI
  10. USDT(omniCore)测试环境搭建
  11. MyEclipse—如何在MyEclipse中创建servlet3.0
  12. python网络爬虫网易云音乐guihub_Python开发的一个命令行的网易云音乐
  13. 5.0以上机器XPOSED框架安装流程
  14. TPP-Fe(3+)四苯基卟啉铁cas16456-81-8性质说明
  15. 增长或下降的百分比计算以及同比环比概念
  16. python使用worldcloud模块、jieba模块做QQ消息记录词云
  17. 大事•Pandownload凉了
  18. iphone与android共享位置,在iPhone或Android上分享你的位置
  19. 【大数据分析】2021“秋招”毕业生求职的网络舆论关注度分析
  20. HTML5篮球弹跳运动规律,篮球体能训练的七大原则

热门文章

  1. 流利阅读 2019.1.31 #10YearChallenge: harmless trend or boon to facial recognition technology?
  2. 一鼓作气 博客--第三篇 note3
  3. 荣耀v30pro升级鸿蒙,华为支持升级鸿蒙OS的机型推荐-升级鸿蒙OS机型榜单
  4. 前端 鼠标悬停事件 是否显示提示框 onmouseover onmouseout
  5. CSS系列之轮廓线outline
  6. 快讯 | 机器人加班也会“猝死”,连续工作 20 小时倒地不起;马斯克暗示或起诉 OpenAI
  7. SQL联合查询--理论知识
  8. PicGo+GitHub使用
  9. IoU系列(IoU, GIoU, DIoU, CIoU)
  10. 就这样拿到了网易的offer