前言
Jetpack Compose 中的列表组件相对于之前的View方式要简单很多。
列表
竖向列表
1 |
|
调用
1 | MyList(listOf("张三","李四","王五")) |
注意
新版本的items方法参数变了。
遍历带索引
1 |
|
横向列表
1 |
|
调用
1 | MyList(mutableListOf<String>("A", "B", "C")) |
设置间距
1 | horizontalArrangement= Arrangement.spacedBy(10.dp) |
项间距
LazyColumn
1 | LazyColumn(verticalArrangement = Arrangement.spacedBy(10.dp)) |
LazyRow
1 | LazyRow(horizontalArrangement = Arrangement.spacedBy(10.dp)) |
详细示例
1 |
|
点击事件带索引
水平
1 | import androidx.compose.foundation.clickable |
垂直
1 | // 任务列表 |
高度等分
有这种需求
我们的列表有固定的项数,我们想让项的高度相等,均分父列表,并且能自适应父列表。
但是LazyColumn没有直接均分的属性,weight也是不能用的,该怎样实现呢?
获取列表的高度减去所有的间距,在计算项的高度,传给Item。
1 |
|
Grid
竖向Grid
可以理解为竖向列表,只不过一行可以设置多列。
基本示例
1 |
|
注意
竖向Grid布局中的子项,也就是上面的GridItem中的根组件的宽度是自动使用父的,设置宽度不会生效。
横竖屏不同列数
1 | import android.content.res.Configuration |
自适应列数
这种方式好在,它能自适应进行布局。
假如页面的宽度是700dp
,我们设置minSize = 300.dp
,这样它会自动变成两列,每列350dp
。
如果页面的宽度变成了500dp
,那么就会变成一列,列的宽度也是500dp
。
总之还是比较智能的。
1 |
|
设置间距
1 | LazyVerticalGrid( |
横向Grid
可以理解为横向列表,只不过一列可以设置多行。
基本示例
1 |
|
注意
竖向Grid布局中的子项,也就是上面的GridItem中的根组件的高度是自动使用父的,设置高度不会生效。
Grid间距
1 |
|