Jetpack Compose ExposedDropdownMenu在按下时未显示出来

15

我正在开发一个使用 Jetpack Compose (1.3.0-beta03) 和 Material3 (1.0.0-beta03) 的应用程序。

我想向用户展示一个简单的下拉菜单,以选择不同的语言。以下代码与网上能找到的代码差别不大:

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun Settings() {
    val languages = listOf("it", "en", "de", "ro", "fr", "es")

    var expanded by remember { mutableStateOf(false) }
    var selectedOptionText by remember { mutableStateOf("ro") }

    ExposedDropdownMenuBox(
        modifier = Modifier.padding(16.dp),
        expanded = expanded,
        onExpandedChange = { expanded = !expanded },
    ) {
        TextField(
            readOnly = true,
            value = selectedOptionText,
            onValueChange = {},
            label = { Text(stringResource(R.string.default_reading_language)) },
            trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) },
            colors = ExposedDropdownMenuDefaults.textFieldColors(),
            modifier = Modifier.fillMaxWidth()
        )
        ExposedDropdownMenu(
            expanded = expanded,
            onDismissRequest = { expanded = false }
        ) {
            languages.forEach {
                DropdownMenuItem(
                    text = { Text(it) },
                    onClick = {
                        selectedOptionText = it
                        expanded = false
                    }
                )
            }
        }
    }
}

在模拟器上运行可以正确显示文本框,但是如果我点击它,则不会显示下拉菜单。它也设置了正确的选项(“ro”),如预期所示。
没有任何修复此问题的线索。
非常感谢任何帮助。

你试过这个吗?https://dev59.com/hlEG5IYBdhLWcg3wX7pa - android
@android 我已经检查过了。被接受的答案几乎与我的代码相同。有什么我需要注意的吗? - Valerio
1个回答

37

使用 M2 时你的代码能够正常工作。

使用 M3 你需要将 menuAnchor 修改器传递给 TextField (它是在material3 1.0.0-beta03中引入的):

ExposedDropdownMenuBox(
    modifier = Modifier.padding(16.dp),
    expanded = expanded,
    onExpandedChange = { expanded = !expanded },
) {
   TextField(
        //...
        modifier = Modifier.menuAnchor()
    )
    ExposedDropdownMenu(
        /* .. */
    ) { /*..  */ }
}

这里输入图片描述


2
它运行得很完美。谢谢Gabriele。 - Valerio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接