如何在 Jetpack Compose 中实现这种布局

2024-04-07

我正在尝试使用新的 Jetpack Compose UI 框架,但遇到了问题。我想实现这个布局,在 xml 中很容易实现:

但我无法弄清楚如何使垂直分隔线占用可用的垂直空间,而不指定固定的高度。我尝试过的这段代码似乎不起作用:

@Composable
fun ListItem(item: PlateUI.Plate) {
    Surface(
        modifier = Modifier.fillMaxWidth(),
        shape = RoundedCornerShape(8.dp),
        elevation = 2.dp
    ) {
        Row(
            modifier = Modifier.fillMaxWidth(),
            verticalAlignment = Alignment.CenterVertically
        ) {
            Column(
                modifier = Modifier
                    .padding(8.dp),
                horizontalAlignment = Alignment.CenterHorizontally
            ) {
                Text(text = "Code")
                Text(text = item.code)
            }
            Spacer(
                modifier = Modifier
                    .preferredWidth(1.dp)
                    .background(color = MaterialTheme.colors.onSurface.copy(0.12f))
            )
            Spacer(modifier = Modifier.weight(1f))
            Text(
                modifier = Modifier
                    .padding(horizontal = 8.dp, vertical = 34.dp),
                text = item.name
            )
            Spacer(modifier = Modifier.weight(1f))
        }
    }
}

我不断得到这个结果:

我也尝试过使用 ConstraintLayout,但它仍然不起作用

@Composable
fun ListItem(item: PlateUI.Plate) {
    Surface(
        modifier = Modifier.fillMaxWidth(),
        shape = RoundedCornerShape(8.dp),
        elevation = 2.dp
    ) {
        ConstraintLayout(
            modifier = Modifier.fillMaxWidth(),
        ) {
            val(column, divider, text) = createRefs()
            Column(
                modifier = Modifier
                    .padding(8.dp)
                    .constrainAs(column){
                        top.linkTo(parent.top)
                        bottom.linkTo(parent.bottom)
                        start.linkTo(parent.start)
                    },
                horizontalAlignment = Alignment.CenterHorizontally
            ) {
                Text(text = "Code")
                Text(text = item.code)
            }
            Spacer(
                modifier = Modifier
                    .preferredWidth(1.dp)
                    .background(color = MaterialTheme.colors.onSurface.copy(0.12f))
                    .constrainAs(divider){
                        top.linkTo(parent.top)
                        bottom.linkTo(parent.bottom)
                        start.linkTo(column.end)
                    }
            )
            Text(
                modifier = Modifier
                    .padding(horizontal = 8.dp, vertical = 34.dp)
                    .constrainAs(text){
                        start.linkTo(divider.end)
                        end.linkTo(parent.end)
                        top.linkTo(parent.top)
                        bottom.linkTo(parent.bottom)
                    },
                text = item.name
            )
        }
    }
}

但似乎没有任何作用。这是一个错误、一个缺失的功能还是我只是错过了一些东西?

编辑:显然真正的问题是,当表面没有固定高度时,分隔线不知道如何测量,将高度设置为等于某个数字可以解决问题,但视图不会适应内容高度不再了,所以这不是解决方案


您可以申请:

  • 修饰符.height(IntrinsicSize.Max) to the Row
  • 修饰语.width(1.dp).fillMaxHeight() to the Spacer

您可以阅读更多有关固有测量 here https://developer.android.com/jetpack/compose/layout#intrinsic-measurements.

就像是:

Row(
    modifier = Modifier.fillMaxWidth().height(IntrinsicSize.Max),
    verticalAlignment = Alignment.CenterVertically
) {
    Column(
        horizontalAlignment = Alignment.CenterHorizontally,
        ....
    ) {
        Text(text = "....")
    }
    Spacer(
        modifier = Modifier
            .width(1.dp)
            .fillMaxHeight()
            .background(color = MaterialTheme.colors.onSurface.copy(0.12f))
    )
    Text(...)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Jetpack Compose 中实现这种布局 的相关文章

  • 是否可以使用最新的 APP_PLATFORM,同时仍保持向后兼容性?

    这是我的 Application mk APP ABI armeabi v7a APP PLATFORM android 16 APP OPTIM release APP STL gnustl static APP CPPFLAGS std
  • 检索子值 -firebase-

    System out println ref child email protected cdn cgi l email protection child email 我正在尝试获取 child 的值 但我始终获取该值的 URL 当我尝试使
  • 我可以在 firebase android 中加载另一个用户个人资料图像吗?

    如果我有其他用户的电子邮件但我以其他用户身份登录 我是否可以加载其他用户的个人资料图像 如果您使用 Firebase Storage 那么从技术上讲是的 它只是一个您可以从中检索任何文件的文件系统 如果不伪造您的应用程序 获取 api 密钥
  • AppCompat v21 工具栏更改徽标大小

    我正在从以前的操作栏迁移到 appcompat v21 中的新工具栏功能 我仍然想将徽标保留在操作栏 工具栏 的左上角 为此 我在布局中添加了支持工具栏 并为其创建了一个新的工具栏 app theme style NewToolBarSty
  • Android Studio:lambda 不起作用[重复]

    这个问题在这里已经有答案了 当尝试使用 lambda 表达式时 我遇到了一些 Gradle 构建错误 错误 41 100 错误 source 1 7 不支持 lambda 表达式 使用 source 8 或更高版本来启用 lambda 表达
  • 如何使用 adb 在设备上安装现有的 Android 应用程序?

    在开发过程中 我使用类似的东西 adb s 192 168 1 77 5555 uninstall com myApp app adb s 192 168 1 77 5555 install path to android debug ap
  • Android Lollipop prepareAsync() 需要很长时间才能返回

    在 Samsung Galaxy Note 4 上的 Android Lollipop 几周前刚刚从 4 4 4 更新 上 prepareAsync 几乎需要 20 秒来加载实时流 在 4 4 4 上 只需要 2 3 秒 并且没有错误 见下
  • 按钮未显示在屏幕上

    我创建了一个应用程序 其中显示带有图像和文本的列表视图 我在页面末尾添加按钮 但这没有显示在屏幕上 我是 Android 新手 我该如何解决这个问题 这是我的 UI XML 代码
  • 如何使用闹钟音量和 setAudioAttributes 来播放铃声?

    所以我正在尝试了解音频属性 这是我到目前为止所拥有的 alarm getSound will return a proper URI to pick a ringtone Ringtone tone RingtoneManager getR
  • 访问角落里的存储

    我能找到的与文件存储有关的最接近文档的是这个帖子 http nookdeveloper zendesk com entries 20257971 updated what are the size constraints on my app
  • 如何在 Android 上创建 YouTube 的双击手势?

    我在 Android 上有 exoplayer 的应用程序 我已经创建了 youtube双击手势用动画向前或向后跳跃 10 秒 如何在双击时创建具有波纹效果的半圆 像这样 这个怎么做 我也想实现这样的功能 所以我自己编写了它来 复制 You
  • Android Studio - 如何关闭“单词‘word’中的拼写错误?”

    当命名变量或给出字符串参数时 Android Studio 似乎对我如何标记事物有问题 有办法把它关掉吗 是的 打开Preferences gt Editor gt Inspections gt Spelling gt 关闭Typo并按OK
  • 从多个选项卡中的编辑文本字段获取文本

    我正在尝试创建一个使用选项卡作为输入表单的 Android 应用程序 基本上 我希望对其进行设置 以便用户可以在一个选项卡上输入一些信息 然后提交该信息 或者转到另一个选项卡并输入更多信息 然后从两个选项卡提交信息 我正在使用操作栏和片段来
  • Android ListView setSelection() 似乎不起作用

    我有一个ListActivity实现onListItemClick 并调用doSomething 类的功能 后者包含l setSelection position where l is the ListView object 现在有一个on
  • 通过列表视图检查动态生成的复选框时遇到问题

    我知道其他成员已经提出了这个问题 一些成员也给出了解决方案 但问题是我没有找到任何适合我的应用程序的解决方案 我正在创建一个应用程序 其中我有一个屏幕 它将显示动态列表视图 其中包含列表项 复选框和三个文本视图 一个用于候选人姓名 另外两个
  • 使用嵌套的 hashmap 参数发送 volley 请求

    我正在使用 android volley 框架向我的服务器发送 jsonobject 请求 get 请求工作正常 现在我想发送一个带有请求参数的 post 请求 该请求参数是嵌套的 hashmap 我重写 getparams 方法 但它期望
  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • 如何获取android手机型号、版本、sdk详细信息?

    如何获取android手机型号 版本 sdk详细信息 首先 看看 android sdk 页面上的这些 Build 类 http developer android com reference android os Build html h
  • 通过powershell运行ADB命令

    所以我尝试通过 powershell 脚本运行一些 ADB 命令 这是我正在尝试做的一个简单示例 adb shell echo in adb shell su root echo you are now root ls cd data da
  • Android ADT Eclipse 插件,parseSDKContent 失败

    我刚刚设置了我的第一个 Android 开发环境 其中包括 日食3 5 Mac OS X 10 5 适用于 x86 mac 的 Android SDK ADT Eclipse 插件 0 9 6 我已将 set PATH 设置为我的 SDK

随机推荐

  • 如何在swift中同时为相机和照片库制作UIImagePickerController

    我使用 UIImagePickerController 通过 iPhone 的相机拍照 我想同时显示 拍照 和 选择照片 My code imagePicker UIImagePickerController imagePicker del
  • 用于电子表格的 Google 应用脚本:如何在脚本管理器中隐藏辅助函数?

    我使用 Google Apps 脚本在 Google 电子表格中自定义了一个菜单 我遇到的问题是 当我按脚本管理器时 我正在使用的所有辅助函数都会列出 我想隐藏它们 我读过如果我在函数名称末尾加下划线 但它不起作用 From documen
  • Ruby 是否像 PHP 一样支持 var 引用?

    在 PHP 中 您可以使两个变量指向相同的数据 a foo b bar a b echo a Outputs bar echo b Outputs bar 我们在 Ruby 中尝试做的事情已经确定 app session等于session
  • 无法使用轨迹球单击列表视图中的视图

    我有一个在行视图中带有可单击按钮的列表视图 以及一个自定义 SimpleCursorAdapter 来实现此列表 尽管单击该行时 onitemclicklistener 没有被触发 请参阅here https stackoverflow c
  • MinGW C 编译器“无法编译简单的测试程序”

    我想将 MinGW 作为 C 编译器运行 MinGW 已从 Chocolatey 安装 调用是通过 CMake 从 gitlab runner 进行的 这失败了 cmake G MinGW Makefiles DCMAKE C COMPIL
  • 通过 Excel VBA 实现 IE11 自动化 - 公司网页

    首先 我对尝试通过 Excel VBA 自动化 IE 还很陌生 话虽这么说 我正在努力自动登录公司特定的网页 仅我们的员工可以访问 目标是自动登录 员工编号 密码并单击 登录 我发现 Firefox 在识别字段方面特别有帮助 所以这就是我在
  • Laravel 翻译 required_if 值

    我正在使用 Laravel 版本 5 2 45 目前我在翻译 required if 规则时遇到一些麻烦 当我使用 required if field value 时 它 会打印错误验证消息中的字段值 在本例中为 1 或 0 这不太可读 例
  • 如何对 LINQ to Objects 查询进行分区?

    这是一个资源分配问题 我的目标是运行查询来获取任何时间段的最高优先级班次 数据集非常大 对于此示例 假设 1000 家公司每个班次有 100 个班次 尽管实际数据集更大 它们都已加载到内存中 我需要对它们运行单个 LINQ to Objec
  • 具有不同图钉颜色的地图视图注释

    我有一个包含 200 多个对象的数组 我试图对每个对象执行循环 每个对象都有一个是 否字段 我想根据该是 否值显示不同颜色的标记 从我所看到的情况来看 我的循环首先遍历每个对象 然后在每个对象的末尾添加所有注释 由于当所有注释都添加到我的地
  • 如何使用 MSAL 对 AAD B2C 进行身份验证?

    我有一个使用 ADAL 的客户端 服务器身份验证的工作版本 但是 当您想要使用本地帐户 即 仅使用用户名或仅使用 AAD 之外没有支持身份验证器的电子邮件地址 时 B2C AAD 似乎无法与 ADAL 很好地配合 看来我们应该用于本地帐户的
  • 参考 Windows Powershell 中的弹出窗口

    我正在为我正在开发的网站进行测试自动化 我正在使用 Windows powershell 创建脚本来执行此操作 我的问题是我需要单击打开另一个窗口的链接 我需要以某种方式引用该窗口 ie new object com InternetExp
  • SQLite 数据到 RecyclerView

    该应用程序的数据存储在 SQLite 数据库中 UI 主要是 RecyclerView 问题是如何最好地将数据从数据库传输到 UI 同时保持主线程的运行 我原本计划使用 CursorLoader ContentProvider 和 Recy
  • 多维数组、可为 null 的引用类型和类型转换

    使用 C 8 的可空引用类型 我们可以编写 对于引用类型 T x T y x 但是 我无法理解多维和锯齿状数组的转换规则 string a new string 1 string b new string 1 string c new st
  • Haskell:ghci 是否显示“Chunk .. Empty”?

    向你学习 Haskell http learnyouahaskell com input and output bytestrings有一个这样的代码示例 ghci gt B pack 99 97 110 Chunk can Empty B
  • Grafana - 是否可以在基于 Loki 的仪表板查询中使用变量?

    我正在 Grafana 上开发基于 Loki 的仪表板 我有一个用于在 Loki 跟踪日志中搜索文本的面板 当前查询如下 job abc service searchTrace json line format if trace messa
  • 获取 rfc7517 格式的 JWKS for Firebase

    我正在使用 Firebase 对我的应用程序中的用户进行身份验证 Firebase 生成一个 JWT 令牌 我需要在我的服务器上对其进行身份验证 我使用 tyk io 来做到这一点 Tyk 支持这些令牌 但要求公钥的数据源位于https w
  • Swagger 将 IFormFile 参数列为“对象”类型

    我有一个控制器 它请求一个包含 IFormFile 作为其属性之一的模型 对于请求描述 Swagger UI 我使用 Swashbuckle 和 OpenApi 3 0 for NET Core 将文件属性的类型列出为类型对象 有没有办法让
  • 为什么 PeekMessage 总是返回 TRUE?

    Main message loop MSG msg ZeroMemory msg sizeof msg while msg message WM QUIT if PeekMessage msg NULL 0U 0U PM REMOVE Tr
  • 将 XSLT 转换作为构建步骤执行

    在 Visual Studio 构建期间 我需要从另一个 XML 文件生成一个 XML 文件 对我来说 很明显 XSLT 模板和转换正是我所需要的 我更喜欢实现此目的的方法是使用项目文件中的 自定义工具 属性 是否已经有一个内置工具可以用于
  • 如何在 Jetpack Compose 中实现这种布局

    我正在尝试使用新的 Jetpack Compose UI 框架 但遇到了问题 我想实现这个布局 在 xml 中很容易实现 但我无法弄清楚如何使垂直分隔线占用可用的垂直空间 而不指定固定的高度 我尝试过的这段代码似乎不起作用 Composab