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 中的第一个元素与屏幕中心对齐 的相关文章

  • 检查片段是否存在并重用它

    每次用户单击列表视图中的项目时 我都会使用以下代码创建一个片段 但通过这种方式 片段是在每次用户点击时创建的 我想要的是重用旧片段 如果存在 并仅重新加载其内容 不创建新片段 MagazineViewFragment fragment ne
  • Nexus One / Android“CPU 可能被固定”错误

    我正在使用 NDK 修订版 4 和 OpenGL ES 2 0 为 Nexus One 编写一款图形密集型游戏 我们真的在这里推动硬件 并且在大多数情况下它运行良好 除了偶尔我会因以下日志消息而严重崩溃 W SharedBufferStac
  • FireStore 日期查询未按预期工作

    我有一个有日期对象的文档 初始化 Firestore 的代码 FirebaseFirestore fireStore FirebaseFirestore getInstance FirebaseFirestoreSettings setti
  • 需要在状态改变时关闭MediaRecorder播放的声音

    我已尝试在下面的链接中找到的更改 但没有效果 如何在状态改变时关闭 MediaRecorder 播放的声音 https stackoverflow com questions 6804205 how to shut off the soun
  • 如何在Android中创建类似架子的视图?

    如何在android中创建一个类似书架的视图 在任意行中显示多本书 此外 它应该具有像 Moon reader 应用程序那样的水平和垂直功能 我可以编写一个水平移动的架子视图 但它不能完全工作 我使用 xml 文件来查看包含图像 文本和按钮
  • 如何将弹出菜单项的方向从右向左更改?

    我知道这个问题被问了很多次 我使用了很多解决方案 但它对我不起作用 我想改变我的方向Menu to rtl用一个Popup但它不起作用 my menu menu menu
  • 在 Android Studio 中调试服务的正确方法?

    在 Android Studio 中调试服务有正确的方法吗 或者 Android Studio 无法做到这一点 当我尝试调试时 它只会断开套接字 与目标虚拟机断开连接 地址 localhost 8600 传输 socket 希望你能在这里帮
  • Android 上关闭并重新打开应用程序后 GPS 不更新位置

    当我关闭我的应用程序一段时间然后再次重新打开它后 我的应用程序将不会更新位置或 有时更新需要很长时间 大约5分钟 我该如何修复它 这是我的代码 private LocationManager lm private LocationListe
  • 文本末尾有额外的换行符

    使用此方法设置文本后 我似乎得到了一些额外的换行符TextView message setText Html fromHtml message 我怎样才能删除这些 它们导致我的布局扭曲 因为它在输出中添加了两条额外的行 该字符串已通过以下方
  • NanoHTTPD 如何将上传的文件保存到SD卡文件夹

    如何将上传的文件保存到SD卡文件夹 目前它存储到 data data cache文件夹 文件名如 NanoHTTPD 一些随机数 我无法将其复制到 SD 卡中的任何文件夹位置 我想将文件保存到 SD 卡中前面提到的文件夹位置 其名称与从我的
  • 如何在 Android 中签署 AAR Artifacts?

    我目前正在开发一个 AAR android 库 我想用我自己的密钥对已发布的工件进行签名 以便我可以确定我是否发布了具有相同名称和功能的假 aar 注意事项1 我希望能够以编程方式检查我的库的真实性 即使是一个伪造的库 只是伪造了我的 aa
  • onPictureTaken 之后旋转 JPEG 的字节数组

    有没有办法旋转字节数组而不将其解码为位图 目前在 jpeg PictureCallback 中我只是将字节数组直接写入文件 但图片是旋转的 我想旋转它们而不解码为位图 希望这能节省我的记忆 BitmapFactory Options o n
  • Android Cloud 2 设备消息传递 (C2DM) 是否与 Google 的两步验证兼容?

    我一直在阅读 Android 的云 2 设备消息传递 C2DM 所有文档都提到 ClientLogin 作为身份验证方法 但是 那客户端登录 http code google com apis accounts docs AuthForIn
  • 使用协程对任务进行排队

    我最近开始阅读有关协程的内容 我想询问某个场景 考虑一个带有一个按钮的简单屏幕 单击后 它会执行一堆打印语句和一些延迟 其间 到目前为止 我正在使用协程来实现这一目标 现在 我的问题是 如果用户反复向该按钮发送垃圾邮件 是否有一种方法可以将
  • 如何在列表视图中选择时启用视频序列自动播放?

    大家好 有人可以与我分享一下我如何编写我的 viewvideo java 类 以便它允许自动播放视频功能 自动排序在列表视图中播放所选视频的任务 从当前位置到最新录制的视频 按顺序直到最新的视频播放完毕 这类似于 YouTube 自动播放功
  • 在Android项目中引用(纯java)项目(找不到类)

    我试图在我的 Android 项目中引用一个纯 java 项目 gt Java 项目有一大堆我需要使用的类 哦 正如第一个回复所指出的 我正在使用 eclipse 是的 唯一的问题是 我总是找不到类 XXX 从方法 com example
  • 如何使用Android Studio录制Android屏幕?

    我已经在 Mac 上的 Applications 文件夹中安装了 Android Studio 我认为 sdk 位于包内容中 但现在我想使用 AShot jar 录制屏幕以获取应用程序的演示视频 我必须放弃SDK的路径 当我给出我认为正确的
  • Android动态功能模块,找不到资源

    当下载的功能模块发布到 Play 商店时 我在启动活动时遇到问题 它总是在下载模块活动中的 setContentView 上崩溃 java lang RuntimeException Unable to start activity Com
  • 如何在Android手机上而不是模拟器上运行或调试?

    Android 模拟器速度太慢 无法测试运行的应用程序 有没有办法使用 IDE 而不是模拟器在真实手机上调试 运行应用程序 通常 您可以在手机上打开 USB 调试 然后通过 USB 将其连接到 PC 然后 手机将以与模拟器相同的方式出现在
  • Android NDK - 仅用 C/C++ 编写

    有没有一种可能的方法可以使用 C C 编写整个 NDK 应用程序 而无需像 hello jni 示例项目 HelloJni java 中那样的 Java 入门 类 以某种方式创建一个 HelloJni c 来执行相同的操作 从 Androi

随机推荐

  • 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 可组合项与屏幕中心对齐 但我不知道它的宽度