JetPack Compose - 卡中行中的weight() 不起作用

2024-05-15

创建 Android 应用程序时,我将一些可组合项放在卡片的一行中,如下所示,但它没有按我的预期工作。我添加“weight(1f)”的可组合项不再显示。

data class Test(
    val title: String,
    val text: String
)

@Composable
fun CardRowSample(
    modifier: Modifier = Modifier,
) {
    val testList =
        listOf(
            Test("AAAA", "1,2,3,4,5,6,7,8,9,10"),
            Test("BBBB", "11,12,13,14,15,16,17,18,19,20")
        )

    LazyColumn(
        modifier = modifier
    ) {
         items(
             items = testList
         ) {
             test ->
                Card(
                    elevation = 12.dp,
                    backgroundColor = Color.LightGray,
                    modifier = Modifier
                        .fillMaxWidth()
                        .heightIn(min = 50.dp)
                        .width(40.dp)
                        .requiredHeight(intrinsicSize = IntrinsicSize.Min)
                        .padding(
                            horizontal = 20.dp,
                            vertical = 20.dp
                        )
                        .border(
                            width = 1.dp,
                            color = Color.Black,
                            shape = RectangleShape
                        )
                ) {
                    Row(
                        modifier = Modifier.fillMaxWidth()
                    ) {

                        Icon(
                            modifier = Modifier
                                .padding(horizontal = 5.dp)
                                .align(Alignment.CenterVertically),
                            imageVector = Icons.Filled.Check,
                            contentDescription = null
                        )

                        Text(
                            text = test.title,
                            fontSize = 20.sp,
                            modifier =
                            Modifier
                                .width(120.dp)
                                .padding(horizontal = 10.dp, vertical = 10.dp)
                        )

                        Text(
                            text = test.text,
                            fontSize = 20.sp,
                            modifier = Modifier
                                .weight(1f)//it doesn't work!!
                                .padding(horizontal = 10.dp, vertical = 10.dp)
                        )
                    }
                }
        }
    }
}

我理想的布局形象:


我编写的代码参考以下问题,Jetpack 组合中的权重 https://stackoverflow.com/questions/58650272/weights-in-jetpack-compose,但我不明白为什么会发生这种情况。我对所有内容都添加了“权重”,并将 fillParentMaxSize 添加到了 Row 的修饰符中,但我无法解决这个问题。

接下来我应该做什么来解决这个问题?


问题不在于Modifier.weight(1f)。这是因为Modifier.requiredHeight(IntrinsicSize.Min)

Card(
    elevation = 12.dp,
    backgroundColor = Color.LightGray,
    modifier = Modifier
        .fillMaxWidth()
        .heightIn(min = 50.dp)
//                    .width(40.dp)
//                    .requiredHeight(intrinsicSize = IntrinsicSize.Min)
        .padding(
            horizontal = 20.dp,
            vertical = 20.dp
        )
        .border(
            width = 1.dp,
            color = Color.Black,
            shape = RectangleShape
        )
) 

另外 Modifier.width(40.dp) 是多余的,因为你有另一个宽度修饰符Modifier.fillMaxWidth()在那之前。

当 Modifier.requiredIn 带有内在大小修饰符时,行为会很奇怪。可组合项被测量两次并具有无限约束

LAYOUT constraints: Constraints(minWidth = 0, maxWidth = 1080, minHeight = 0, maxHeight = Infinity), width: 1080, height: 235
LAYOUT constraints: Constraints(minWidth = 0, maxWidth = Infinity, minHeight = 235, maxHeight = 235), width: 510, height: 235

这是第二次测量断裂宽度,因为maxWidth = Infinity。 1080px 是我设备上的全宽

查看可以使用的约束和可组合宽度和高度

Card(
    elevation = 12.dp,
    backgroundColor = Color.LightGray,
    modifier = Modifier
        .fillMaxWidth()
        .heightIn(min = 50.dp)
//                    .width(40.dp)
                    .requiredHeight(intrinsicSize = IntrinsicSize.Min)
        .layout { measurable, constraints ->
            val placeable = measurable.measure(constraints)
            println("LAYOUT constraints: $constraints, width: ${placeable.width}, height: ${placeable.height}")
            layout(placeable.width,placeable.height){
                placeable.placeRelative(0,0)
            }
        }
        .padding(
            horizontal = 20.dp,
            vertical = 20.dp
        )
        .border(
            width = 1.dp,
            color = Color.Black,
            shape = RectangleShape
        )
) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JetPack Compose - 卡中行中的weight() 不起作用 的相关文章

  • Android:直接截屏到字节 - 跳过保存到文件

    我使用以下代码在 root 设备上截取屏幕截图 sh Runtime getRuntime exec su null null os sh getOutputStream os write system bin screencap p sd
  • 如何使用字符串搜索将一种布局膨胀为另一种布局

    如何将两者都加粗xml来自带有 switch case 的搜索字符串的字符串 我想更改每个 xml 字符串textview此更改将在按钮单击时发生 String strfistsearch mylist get 7 get data4 if
  • 让两种口味使用相同的sourceSet

    我有两种风格 demo 和 full 每种风格都有自己的源集在 src demo 和 src full 中 这很好用 我现在想做第三种使用这些源集之一的风格 我该怎么做呢 我尝试过类似的东西 productFlavors full appl
  • 如何使用 Gson 跳过空条目

    使用 Gson 反序列化 JSON 时 有没有办法跳过 JSON 数组中的空条目 text adsfsd title asdfsd null text adsfsd title asdfsd 生成的 List 有 3 个条目 第二个条目为空
  • 为什么我不应该在 android 中使用 System.out.println()

    In the Android开源项目的代码风格 http source android com source code style html 它指出我们不应该使用System out println 但我不明白为什么 谁能解释一下吗 我应该
  • ListView 滚动时隐藏和显示浮动按钮

    我正在我的应用程序中创建一个 listView 和一个浮动按钮 我希望根据滚动状态实现隐藏和返回的效果 当 的时候ListView滚动时按钮隐藏得很好 但是当滚动停止时按钮不会返回到其初始位置 有任何想法吗 My Code public c
  • Xamarin:找不到“libmonodroid.so”模拟器错误

    我已经遇到这个问题几天了 但还没有找到解决方案 我一直在使用Android 7 0 ARM armeabi v7a 我的模拟器的图像 因为它太慢了 我一直在尝试使用Android 7 0 Intel Atom x86 64 with HAX
  • Android模拟器收不到推送通知

    我在谷歌云上使用推送通知 但是由于某种原因我无法在模拟器上接收推送通知 然而 当我在真实设备上测试时 同一个应用程序确实会收到通知 有其他人遇到过这个问题或找到解决方案吗 模拟设备具有网络访问权限 并且与真实设备具有相同的 Android
  • 如何在Android中设置对话框的图标

    我想在Android中自定义一个对话框 我知道如何设置对话框的标题 dialog setTitle O message 现在我想在标题前面设置图标 我怎样才能实现这个目标 Dialog dialog dialog new Dialog th
  • 创建全球唯一的 Android 标识符

    说到Android唯一ID 相信大家都见过this https stackoverflow com questions 2785485 is there a unique android device id 但是我也试图提出一个解决方案来唯
  • 从通用对象访问字段变量

    我有两节课ClassOne and ClassTwo 更新公共字段data i e public class ClassOne public byte data new byte 10 Thread that updates data an
  • 如何过滤EditText的输入?

    我想过滤一个的输入EditText 只允许使用数字和字母 首先我使用TextWatcher处理最后一个输入字符 但是当您移动光标或将某些内容粘贴到EditText 这个方法失败了 现在我想知道有没有办法过滤非法输入并反馈给用户 Add In
  • 使用 sdk 3.0 在 Facebook 墙上发布

    我试图在由其 ID 定义的用户墙上发布一条消息 但作为响应 我收到错误 未知方法 我的代码是 final Bundle params new Bundle params putByteArray message Test getBytes
  • Android-如何在指定时间后台下载数据

    我提前很抱歉没有发布任何代码 主要是因为我一生都无法弄清楚我需要如何做我需要做的事情 基本上 在一天中的指定时间间隔 例如下午 5 点 我希望我的应用程序从我的服务器下载一些数据并将其存储在设备上 这是为了减少每次运行应用程序时下载数据对我
  • 多少次函数调用会导致堆栈溢出

    你好 Android Java 开发者 当一个函数调用一个函数并且该函数调用另一个函数等等时 有多少次调用 堆栈长度 会让我陷入堆栈溢出 有一般经验法则吗 我问的原因是因为我现在对于我的 5 人纸牌游戏来说哪个更有效 设计明智 解决方案一
  • 在 Repository 类中观察 Forever 是一个好习惯吗?数据库+网络分页列表

    我正在按照架构指南构建应用程序 实现了房间数据库缓存 网络 需要从单独的实体获取最新页码 我的型号 Entity tableName top rated movie page public class Top Rated Movies Pa
  • Android Wear Preview 未连接到 Wear Emulator

    我正在尝试为 Google Wear 设置开发环境并遵循 Google 的指示 http developer android com training wearables apps creating html但一旦我设置了端口转发 adb
  • 注意通知持续时间

    是否可以将抬头通知的持续时间设置为无限 现在它只显示 5 秒 已经尝试过不同的事情 例如更改类别 但持续时间始终为 5 秒 这是我的代码 Notification notification notificationBuilder setCa
  • Android:使用 ObjectAnimator 平移具有视图尺寸小数值的视图

    看来旧的视图动画 translate scale等 不再被接受AnimationInflater 至少截至 ICS 而言 我在 4 0 4 中阅读了它的代码 它明确只需要 XML 元素set objectAnimator animator
  • 当从 Firebase 控制台删除 Firebase 用户(用户登录后)时,它不会反映在应用程序中 [重复]

    这个问题在这里已经有答案了 The user uid仍然会来 在这个的帮助下uid null 我假设用户已登录 我也尝试过addAuthStateListener mAuthListener 但我仍然获取之前删除的用户的 UID 如果不使用

随机推荐