Jetpack Compose - 使 LazyRow 中的第一个元素与屏幕中心对齐

2023-12-01

我想获得一个LazyRow看起来像这样:

|--aaa-b|bb-cccc|-dd... ...|w--x---|

|--------|是一屏宽度

元素的大小各不相同,但它们之间的间距是固定的。 我想我可以添加一些开始内容填充LazyRow以便“aaa”可组合项与屏幕中心对齐,但我不知道它的宽度。

如果您认为我问的不清楚,请发表评论。

UPDATE

添加了 gif 以便更好地理解

enter image description here


您可以使用BoxWithConstraints获取屏幕宽度。然后你可以使用Layout正确定位列表中的项目。

@Composable
fun BigCarousel() {
    val items = (0..10).map { "Item $it" }
    BoxWithConstraints {
        LazyRow {
            itemsIndexed(items) { index, item ->
                Layout(
                    content = {
                        // Here's the content of each list item.
                        Box(
                            Modifier
                                .size(200.dp)
                                .padding(8.dp)
                                .background(Color.Gray)
                        ) {
                            Text(text = item, Modifier.align(Alignment.Center))
                        }
                    },
                    measurePolicy = { measurables, constraints ->
                        // I'm assuming you'll declaring just one root 
                        // composable in the content function above
                        // so it's measuring just the Box
                        val placeable = measurables.first().measure(constraints)
                        // maxWidth is from the BoxWithConstraints
                        val maxWidthInPx = maxWidth.roundToPx()
                        // Box width
                        val itemWidth = placeable.width
                        // Calculating the space for the first and last item
                        val startSpace =
                            if (index == 0) (maxWidthInPx - itemWidth) / 2 else 0
                        val endSpace =
                            if (index == items.lastIndex) (maxWidthInPx - itemWidth) / 2 else 0
                        // The width of the box + extra space
                        val width = startSpace + placeable.width + endSpace
                        layout(width, placeable.height) {
                            // Placing the Box in the right X position
                            val x = if (index == 0) startSpace else 0
                            placeable.place(x, 0)
                        }
                    }
                )
            }
        }
    }
}

结果如下:

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jetpack Compose - 使 LazyRow 中的第一个元素与屏幕中心对齐 的相关文章

随机推荐

  • Unity 3d 中的 PlayerPrefs 不起作用(有时)[重复]

    这个问题在这里已经有答案了 救命 PlayerPrefs 似乎不起作用 也不知道为什么 我有一个简单的游戏 开头是 void Start if PlayerPrefs GetInt IsReturningUser 1 ScoreLabel
  • android 谷歌地图弹出按钮

    好的 到目前为止 我拥有的是一个带有 Google 地图的 Android 应用程序 我在其中放置了一堆图标 当单击这些图标时 会创建一个带有一些文本的弹出窗口 有什么办法可以在弹出窗口上放置一个按钮吗 如果这是不可能的 是否有某种方法可以
  • 从 GMail 的“已发送邮件”文件夹中获取电子邮件标头

    我的程序通过 GMail 向联系人发送电子邮件 通常情况下 这种方法效果很好 但我们注意到 有时我的程序 认为 它已发送的电子邮件实际上并未到达 Gmail 更不用说到达联系人了 我想我也许可以在程序中添加一个检查 访问 Gmail 已发送
  • HTML5 的输入模式属性忽略大小写

    我需要让 HTML 输入元素模式忽略值的大小写 就像如果正则表达式是 a z 我可以让它匹配所有大写字母吗 我知道我可以这样做 a zA Z 但那只是一个例子 我认为这是不可能的 规范上
  • 每次发出信号时都会多次调用插槽

    我在一个块中使用一个信号和槽连接 我的代码如下 in a cpp QObject connect m ptheFlange2Details SIGNAL GetFlang1DimAfterAnalysis this SLOT GetFlan
  • 我可以根据 firebase firestore 中对象的长度对结果进行排序吗?

    我的 firestore 文档中有一个投票字段 其中存储了对该文档进行投票的人员的 uid 我想调用所有文件并按照投票对象中的票数排序 I tried db collection myCollection orderBy Object ke
  • 合并两个不同维度的数组 PHP

    我有两个不同的维度数组 Array 1 Array1 0 gt Array id gt 123 price gt 5 purchase time gt 2014 4 10 1 gt Array id gt 123 price gt 5 pu
  • 尝试使用 javascript、jquery 和 html 搜索 wunderground 位置

    下面的代码不起作用 尝试搜索天气位置 当我搜索时什么也没有发生
  • Excel-VBA - 在数据字段数组中插入新的第一列,无需循环或 API 调用

    Intro 去年 PrzemyslawRemin 提出了这个问题如何在VBA中向现有矩阵添加计数器列 无需额外的循环 and 无需修改工作表 本示例中的原始矩阵是一个 基于 1 的 2 维 数据字段数组 源单元格仅包含其地址字符串 插入的行
  • 带回“覆盖”窗口方法[重复]

    这个问题在这里已经有答案了 如果我将 window alert 重置为其他功能 有什么方法可以恢复它而无需先 保存 它 例如 window alert function 这样做之后 有没有办法将 window alert 恢复到原来的状态
  • 将静态库转换为共享库?

    我有一个第三方库 主要由大量静态 a 库文件 我可以将其编译成一个 a库文件 但我真的需要它是一个单一的 so共享库文件 有什么方法可以将静态转换为 a文件到共享 so文件 或者更一般地说 是否有一个好的方法来组合大量的静态 a文件有几个
  • 在 Django 框架中发出 ajax Post 请求时出现 403 Forbidden 错误

    我正在尝试将 jquery 集成到我使用 Django 框架制作的 Web 应用程序中 然而我很难尝试做一个简单的ajax打电话去上班 我的模板文件包含用于处理 ajax 调用的 html 和 javascript 表单 如下所示
  • iPhone:在应用程序中同时使用 OpenGL 和本机用户界面的最佳方式是什么?

    我对 iPhone 平台还很陌生 所以我想知道在 OpenGL 渲染和 UIView 之间切换的最佳方式是什么 任何评论都非常感谢 根本不需要切换模式 iPhone 上的 OpenGL ES 渲染是在 CAEAGLLayer 核心动画层中完
  • 如何将一张表与许多不同的表关联起来?

    我有一个表格列表 即学生 教师 员工 部门 等等 每个表都有特定的注释 现在 表中的一条记录可以有一个或多个注释 这表明从任何表到注释表都是一对多关系 我不知道将评论表与其中每一个相关联的最佳方法是什么 如果我将评论表中的外键放入每个表中
  • 如何绘制堆积事件持续时间(甘特图)

    我有一个 Pandas DataFrame 其中包含流量计开始测量流量的日期以及该站退役的日期 我想生成一个以图形方式显示这些日期的图 这是我的数据框的示例 import pandas as pd data index 40623 4063
  • 将团队构建输出文件夹中的文件包含到 XAP 中

    我正在尝试使用 TFS 2010 对 Windows Phone 7 1 项目进行持续集成 有2个资源项目 用于本地化的 Win32 项目 和主要的 Windows Phone 项目 我已将上述 2 个项目的项目输出复制到主 WP 项目中的
  • Docker 堆栈在 Windows 中部署

    我在 docker stack windows 中有一些问题 我们可以在Windows 2016中启用docker stack吗 是否完全支持 如果是 我们如何启用 我们如何使用此文件自动创建 swarm 集群 我搜索过 google 但找
  • 服务器作曲家安装 --no-dev 被杀死

    当我尝试更新包时在服务器中 composer install no dev 结果是 我该如何修复它 看起来像composer install正在尝试更新软件包 因此您可能没有composer lock文件在你的项目中 在这种情况下compo
  • CFDictionary 获取 Swift3 中键的值

    我在访问 CFDictionary 中的特定 或任何 键时遇到问题 老实说 我真的不明白你需要在 Swift 中执行此操作的方式 而且我认为它过于复杂 My Code if let session DASessionCreate kCFAl
  • Jetpack Compose - 使 LazyRow 中的第一个元素与屏幕中心对齐

    我想获得一个LazyRow看起来像这样 aaa b bb cccc dd w x 是一屏宽度 元素的大小各不相同 但它们之间的间距是固定的 我想我可以添加一些开始内容填充LazyRow以便 aaa 可组合项与屏幕中心对齐 但我不知道它的宽度