我正在开发 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 = …
Run Code Online (Sandbox Code Playgroud) android android-jetpack-compose android-compose-textfield android-jetpack-compose-material3 android-compose-exposeddropdown
我遇到以下问题 - 下拉菜单项的宽度与 OutlinedTextField 的宽度不同
寻找解决方案 - 发现以下内容:
添加变量以保持textField
宽度:
var textFieldSize by remember { mutableStateOf(Size.Zero) }
Run Code Online (Sandbox Code Playgroud)
将值设置onGloballyPositioned
为TextField
onGloballyPositioned { coordinates ->
textFieldSize = coordinates.size.toSize()
}
Run Code Online (Sandbox Code Playgroud)
读取其中的值ExposedDropdownMenu
ExposedDropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false },
modifier = Modifier
.background(Color.White)
.width(with(LocalDensity.current) { textFieldSize.width.toDp() })
)
Run Code Online (Sandbox Code Playgroud)
问题是它可以很好地与 一起工作DropdownMenu
,但不能与 一起工作ExposedDropdownMenu
。有什么问题?
这是完整的代码:
var expanded by remember { mutableStateOf(false) }
val genderList by remember { mutableStateOf(listOf("Male", "Female")) }
var textFieldSize by remember { …
Run Code Online (Sandbox Code Playgroud) 在将我的应用程序迁移到 Jetpack compose 的过程中,我遇到了应用程序中 TextField 需要自动完成功能的部分。
但是,从版本 1.0.0-alpha05 开始,我找不到任何使用 Compose API 实现此目的的功能。我发现的最接近的东西是DropdownMenu
和DropdownMenuItem
可组合项,但似乎需要大量手动管道才能从中创建自动完成菜单。
当然,显而易见的事情就是等待 Jetpack Compose 的未来更新。但我想知道,在迁移中遇到此问题的人是否找到了解决方案?