Shr*_*h.K 3 android kotlin android-jetpack android-jetpack-compose
我正在创建一个下拉菜单,其中的项目包含一个文本元素和一个图标(中间有一个分隔符);但只有第一个文本完整显示。仅当有其他项目占用更多空间时,该图标才可见。

@Preview(showSystemUi = true)
@Composable
fun MyScreen() {
Box(Modifier.fillMaxSize(), Alignment.Center) {
Box() {
var expanded by remember { mutableStateOf(false) }
IconButton(onClick = { expanded = !expanded }) {
Icon(imageVector = Icons.Default.MoreVert, contentDescription = null)
}
DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) {
MyMenuItem("item 1") // Icon visible
MyMenuItem("item 2") // Icon visible
MyMenuItem("item 3 long text") // Icon width shrunk to 0
MyMenuItem("item 4 long te") // Icon visible but shrunk
}
}
}
}
@Composable
fun MyMenuItem(text: String) {
DropdownMenuItem(onClick = { }) {
Text(text)
Spacer(modifier = Modifier.weight(1f))
Icon(imageVector = Icons.Default.Check, contentDescription = null) // <-- Icon
}
}
Run Code Online (Sandbox Code Playgroud)
Row()andSurface()代替DropdownMenuItem(),但结果是相似的。MyMenuItem();但我希望它根据内容自动调整大小。一般来说,要创建这样的布局,您只需将其应用Modifier.weight(1f)到您的Text.
您还需要Modifier.width(IntrinsicSize.Max)使Column宽度等于最宽的项目,但在您的情况下,它已经内置到DropdownMenu.
但随后就会出现这个错误,它不允许您正确调整MyMenuItem内部尺寸Icon。请加星以引起更多关注。
作为此错误修复之前的临时解决方案,您可以手动指定图标的大小,如下所示:
// copied from the source code as it's internal
const val MaterialIconDimension = 24f
@Composable
fun MyMenuItem(text: String) {
DropdownMenuItem(
onClick = { }
) {
Text(text, Modifier.weight(1f))
Icon(
imageVector = Icons.Default.Check,
contentDescription = null,
modifier = Modifier.size(MaterialIconDimension.dp)
)
}
}
Run Code Online (Sandbox Code Playgroud)
结果:

| 归档时间: |
|
| 查看次数: |
1816 次 |
| 最近记录: |