我正在构建一个基本的布局,它显示一个带有卡片的水平滚动行。卡片是一个列组件,中间有几个分隔符:
@Composable
fun TestCard(
name: String
) {
Column(
modifier = Modifier
.background(MaterialTheme.colors.surface)
.padding(12.dp),
horizontalAlignment = Alignment.Start
) {
Text(text = name, style = Typography.h4.bold.black)
Spacer(modifier = Modifier.height(8.dp))
Divider(color = Color.Black) //DOES NOT APPEAR IN ROW
Spacer(modifier = Modifier.height(8.dp))
Divider(modifier = Modifier.fillMaxWidth(), color = Color.Black) //DOES NOT APPEAR IN ROW
Spacer(modifier = Modifier.height(8.dp))
Text(text = "Other text", style = Typography.h4.bold.black)
}
}
我还有一个可滚动行,其中包含这些卡片的列表:
@Composable
fun TestComponent() {
val scrollState = rememberScrollState()
val names = listOf("Martha", "Erik","Steve","Roy","Pete")
Column(
modifier = Modifier
.fillMaxWidth()
.background(MaterialTheme.colors.primary),
horizontalAlignment = Alignment.Start
) {
Row(Modifier.horizontalScroll(scrollState), horizontalArrangement = Arrangement.spacedBy(16.dp)) {
names.forEach { name ->
TestCard(name)
}
}
}
}
当我单独显示卡片时,我可以看到两个分隔线。当我显示包含卡片的行时,分隔线不显示,因为它们的宽度设置为0(我可以使用LayoutInspector验证分隔线是否存在)。视觉表示:
我知道我可以为宽度创建一个状态变量,它将在Modifier.onSizeChanged
中更新,但我确信发生这种情况一定有原因,也一定有更好的解决方案。
1条答案
按热度按时间von4xj4u1#
Divider
有一个fillMaxWidth()
修饰符,但是当你检查文档时:如果传入的最大宽度为
Constraints.Infinity
,则此修改器无效。这是因为
horizontalScroll
。必须指定
Divider
和Spacer
的宽度。解决方法是将
width(IntrinsicSize.Max)
应用于TestCard
中的Column
。这样,约束条件具有Constraints.fixedWidth(width)
: