我想创建一个包含两个文本的列表项,一个锚定到父级的开头,一个锚定到父级的末尾,我希望每次都能动态处理空间,如果太长,它应该换行文本并换行,我的问题是我在任何地方都使用这个项目,有时 Text1 比 Text2 占用更多空间,反之亦然,这使得使用带有权重的 Row 没有用,我尝试使用约束布局,带有顶部、底部和开始/结束约束,但是这会使文本太长时重叠。
这是我的约束布局方法:
val offset: Dp = 8.dp
val modifier = if (onClick != null) {
Modifier
.fillMaxWidth()
.background(backgroundColor)
.height(rowHeight)
.clickable(
onClick = onClick
)
} else {
Modifier
.fillMaxWidth(widthPercentage)
.background(backgroundColor)
.defaultMinSize(minHeight = rowHeight)
}
ConstraintLayout(
modifier = modifier
) {
val (titleRef, infoRef, disclosureRef) = createRefs()
Text(
text = title,
color = titleColor,
style = titleStyle,
modifier = Modifier
.constrainAs(titleRef) {
start.linkTo(parent.start, margin = horizontalPadding)
top.linkTo(parent.top)
bottom.linkTo(parent.bottom)
}
)
Text(
text = infoText,
color = infoTextColor,
style = infoStyle,
textAlign = TextAlign.End,
modifier = Modifier
.constrainAs(infoRef) {
if (showDisclosure) {
end.linkTo(disclosureRef.start, margin = offset)
} else {
end.linkTo(parent.end, margin = horizontalPadding)
}
top.linkTo(parent.top)
bottom.linkTo(parent.bottom)
}
)
if (showDisclosure) {
Image(
painter = painterResource(id = R.drawable.ic_disclosure_gray),
modifier = Modifier
.constrainAs(disclosureRef) {
end.linkTo(parent.end, margin = horizontalPadding - offset)
top.linkTo(parent.top)
bottom.linkTo(parent.bottom)
}
)
}
}
当每次想要不同的文本具有更大的权重时,行方法并没有给我灵活性:
val offset: Dp = 8.dp
val modifier = if (onClick != null) {
Modifier
.defaultMinSize(minHeight = 35.dp)
.fillMaxWidth()
.background(backgroundColor)
.padding(vertical = verticalPadding)
.clickable(
onClick = onClick
)
} else {
Modifier
.fillMaxWidth(widthPercentage)
.background(backgroundColor)
.padding(vertical = verticalPadding)
.defaultMinSize(minHeight = rowHeight)
}
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = modifier
) {
Text(
text = title,
color = titleColor,
style = titleStyle,
maxLines = 2,
modifier = Modifier
.weight(1f)
.padding(start = horizontalPadding)
)
val trailingPadding = if (showDisclosure) {
offset
} else {
horizontalPadding
}
Text(
text = infoText,
color = infoTextColor,
style = infoStyle,
textAlign = TextAlign.End,
modifier = Modifier
.weight(1.5f)
.padding(start = horizontalPadding, end = trailingPadding)
)
if (showDisclosure) {
Image(
painter = painterResource(id = R.drawable.ic_disclosure_gray),
modifier = Modifier
.padding(end = offset)
// .align(Alignment.CenterVertically)
)
}
}
我期待什么:
为什么你说 [
weight][1]
修饰符在你的情况下不起作用?因为我的第一个建议就是使用 weight
,如下所示:
@Composable
fun MyComposable() {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween
) {
Text(
modifier = Modifier.weight(1f),
text = "ABC DEF"
)
Text(text = "1000 1000 1000 1000 1000 1000 1000 1000 1000")
}
}