gpt4 book ai didi

android - 下拉菜单剪辑/缩小项目 Jetpack Compose

转载 作者:行者123 更新时间:2023-12-04 23:55:45 25 4
gpt4 key购买 nike

我正在创建一个下拉菜单,其中的项目包含一个文本元素和一个图标(中间有一个间隔符);但只有第一个文本被完整显示。该图标仅在有其他项目占用更多空间时可见。

@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
}
}

注意事项:

  1. 我也尝试过使用 Row()Surface() 代替 DropdownMenuItem() 但结果是相似的。<
  2. MyMenuItem() 提供宽度;但我希望它根据内容自动调整自己的大小。

最佳答案

一般来说,要创建这样的布局,您只需将 Modifier.weight(1f) 应用于您的 Text

您还需要 Modifier.width(IntrinsicSize.Max) 为您的 Column 使宽度等于最宽的项目,但在您的情况下它已经内置于 下拉菜单

然后this bug弹出,这不允许您使用 Icon 正确调整 MyMenuItem 的大小。请打个星标以引起更多关注。

作为此错误修复之前的临时解决方案,您可以手动指定图标的大小,如下所示:

// 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)
)
}
}

结果:

关于android - 下拉菜单剪辑/缩小项目 Jetpack Compose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69921390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com