net*_*men 4 android-jetpack-compose
我有一个包含两个文本的布局,一个在左侧,一个在右侧。如果两个文本都很长,则左文本应占宽度的 60%,右文本应占宽度的 40%。但如果右侧文本短于 40%,则左侧文本应占据所有可用空间。
Row {
Text(text = left, modifier = modifier.padding(8.dp).weight(<min 0.6f>))
Text(text = right, modifier = modifier.padding(8.dp).weight(<max 0.4f>))
}
Run Code Online (Sandbox Code Playgroud)
有什么办法可以实现这一点吗?
最后,我想通了。这是修改器:
fun Modifier.maxWidth(
fraction: Float = 1f,
) = layout { measurable, constraints ->
val maxWidth = (constraints.maxWidth * fraction).roundToInt()
val width = measurable.maxIntrinsicWidth(constraints.maxHeight).coerceAtMost(maxWidth)
val placeable = measurable.measure(Constraints(constraints.minWidth, width, constraints.minHeight, constraints.maxHeight))
layout(width, placeable.height) {
placeable.placeRelative(0, 0)
}
}
Run Code Online (Sandbox Code Playgroud)
所以我们可以这样使用它:
Row {
Text(text = left, modifier = modifier.padding(8.dp).weight(1f)) // left text uses all the available space
Text(text = right, modifier = modifier.padding(8.dp).maxWidth(fraction = 0.4f)) // right text can be 40% of the parent or less
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1355 次 |
| 最近记录: |