android - Jetpack Compose 将行/列子项相对于彼此对齐
问题描述
有没有一种简单的方法,无需借助手动布局或约束布局,就可以将列/行的子项彼此相对对齐,而与列/行内容对齐无关?
这就是我想要实现的目标:拥有一个将其内容向右对齐的 Column。但是孩子们彼此居中对齐。
解决方案
您可以像上面的答案一样将孩子包装在一个容器中,但我更喜欢编写自定义可组合项,因为这在 Jetpack Compose 中很容易做到,然后您可以在您的应用程序中重用它们。
您可以使用此自定义列来实现
@Composable
fun MyColumn(
modifier: Modifier = Modifier,
content: @Composable () -> Unit,
) {
Layout(
content = content,
modifier = modifier,
) { measurables, constraints ->
val looseConstraints = constraints.copy(
minWidth = 0,
minHeight = 0,
)
val placeables = measurables.map { measurable ->
measurable.measure(looseConstraints)
}
val maxChildWidth = placeables.maxByOrNull { it.width }?.width ?: 0
val height = placeables.sumOf { it.height }
layout(
constraints.maxWidth,
height.coerceAtMost(constraints.maxHeight),
) {
var yPosition = 0
val maxWidth = constraints.maxWidth
placeables.forEach { placeable ->
val deltaX = maxWidth - maxChildWidth + (maxChildWidth - placeable.width) / 2
placeable.place(deltaX, yPosition)
yPosition += placeable.height
}
}
}
}
推荐阅读
- ssl - Confluent REST 代理 API SSL 握手失败
- python - 在创建关系时从 2 个不同的目录读取到 pandas 数据框
- python - 从乘法seasonal_decompose中获取季节性和残差?
- javascript - 从 php 变量到 jquery 函数的随机值
- android - Travis CI + Android:不接受许可证(构建超时)
- bison - 运算符优先级被忽略/在 Bison 中不起作用
- json - 尝试使用 expo 在 iPhone 上重新加载应用程序但返回“ENOENT:没有这样的文件或目录”错误。添加png图片后
- python - Model.trainable = False 与 Model.compile()
- python - 在多个字段上查找平均值
- javascript - 从日期字符串中剥离时区并转换为 Date 对象