前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jetpack Compose中的列表组件

Jetpack Compose中的列表组件

作者头像
码客说
发布2024-03-29 12:55:20
850
发布2024-03-29 12:55:20
举报
文章被收录于专栏:码客码客

前言

Jetpack Compose 中的列表组件相对于之前的View方式要简单很多。

竖向列表

代码语言:javascript
复制
@Composable
fun MyList(mList: List<String>){
    LazyColumn {
       items(mList.size){
           ListItem(mList[it])
       }
    }
}

@Composable
fun ListItem(text: String) {
    // 构建列表项的 UI
    Text(text = text)
}

调用

代码语言:javascript
复制
MyList(listOf("张三","李四","王五"))

注意

新版本的items方法参数变了。

横向列表

代码语言:javascript
复制
@Composable
fun MyList(mList: List<String>){
    LazyRow {
       items(mList.size){
           ListItem(mList[it])
       }
    }
}

@Composable
fun ListItem(text: String) {
    // 构建列表项的 UI
    Text(text = text)
}

调用

代码语言:javascript
复制
MyList(mutableListOf<String>("A", "B", "C"))

设置间距

代码语言:javascript
复制
horizontalArrangement= Arrangement.spacedBy(10.dp)

竖向Grid

基本示例

代码语言:javascript
复制
@Composable
fun MyGridList(mList: List<String>) {
    LazyVerticalGrid(columns = GridCells.Fixed(2)) {
        items(mList.size) { index ->
            // 在这里构建您的列表项
            GridItem(text = mList[index])
        }
    }
}

@Composable
fun GridItem(text: String) {
    // 构建列表项的 UI
    Card(
        modifier = Modifier.padding(16.dp).height(30.dp),
    ) {
        Text(text)
    }
}

注意

竖向Grid布局中的子项,也就是上面的GridItem中的根组件的宽度是自动使用父的,设置宽度不会生效。

自适应列数

这种方式好在,它能自适应进行布局。

假如页面的宽度是700dp,我们设置minSize = 300.dp,这样它会自动变成两列,每列350dp

如果页面的宽度变成了500dp,那么就会变成一列,列的宽度也是500dp

总之还是比较智能的。

代码语言:javascript
复制
@Composable
fun AppListView(mList: List<AppModel>) {
    LazyVerticalGrid(
        columns = GridCells.Adaptive(minSize = 300.dp),
        contentPadding = PaddingValues(10.dp),
        verticalArrangement = Arrangement.Top
    ) {
        items(mList.size,key = {item -> item }) {
            Box(
                modifier = Modifier
                    .padding(10.dp)
                    .fillMaxSize()
            ) {
                AppListItem(mList[it])
            }
        }
    }
}

设置间距

代码语言:javascript
复制
LazyVerticalGrid(
    columns = GridCells.Fixed(2),
    verticalArrangement = Arrangement.spacedBy(16.dp),
    horizontalArrangement = Arrangement.spacedBy(16.dp)
) {
    items(photos) { item ->
        PhotoItem(item)
    }
}

横向Grid

代码语言:javascript
复制
@Composable
fun MyGridList(mList: List<String>) {
    LazyHorizontalGrid(rows = GridCells.Fixed(2)) {
        items(mList.size) { index ->
            // 在这里构建您的列表项
            GridItem(text = mList[index])
        }
    }
}

@Composable
fun GridItem(text: String) {
    // 构建列表项的 UI
    Card(
        modifier = Modifier.padding(16.dp).height(30.dp),
    ) {
        Text(text)
    }
}

注意

竖向Grid布局中的子项,也就是上面的GridItem中的根组件的高度是自动使用父的,设置高度不会生效。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 竖向列表
  • 横向列表
  • 竖向Grid
    • 基本示例
      • 自适应列数
        • 设置间距
        • 横向Grid
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档