微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jetpack 组合的公开下拉菜单

如何解决jetpack 组合的公开下拉菜单

我想知道是否有针对 jetpack compose 的 Exposed 下拉菜单解决方案? 我无法在 jetpack compose 中为这个组件找到合适的解决方案。有什么帮助吗?

Drop-down

解决方法

目前 1.0.0(使用 1.0.0-beta08 测试)没有内置组件。
您可以使用 OutlinedTextField + DropdownMenu

这只是一个基本的(非常基本的)实现:

var expanded by remember { mutableStateOf(false) }
val suggestions = listOf("Item1","Item2","Item3")
var selectedText by remember { mutableStateOf("") }

val icon = if (expanded)
    Icons.Filled.....
else
    Icons.Filled.ArrowDropDown


Column() {
    OutlinedTextField(
        value = selectedText,onValueChange = { selectedText = it },modifier = Modifier.fillMaxWidth(),label = {Text("Label")},trailingIcon = {
            Icon(icon,"contentDescription",Modifier.clickable { expanded = !expanded })
        }
    )
    DropdownMenu(
        expanded = expanded,onDismissRequest = { expanded = false },modifier = Modifier.fillMaxWidth()
    ) {
        suggestions.forEach { label ->
            DropdownMenuItem(onClick = {
                selectedText = label
            }) {
                Text(text = label)
            }
        }
    }
}

enter image description here enter image description here

,

我这样做是为了使宽度与文本字段相同:复制和修改 Gabriele 的答案。

var expanded by remember { mutableStateOf(false) }
val suggestions = listOf("Item1","Item3")
var selectedText by remember { mutableStateOf("") }

var dropDownWidth by remember { mutableStateOf(0) }

val icon = if (expanded)
    Icons.Filled.....
else
    Icons.Filled.ArrowDropDown


Column() {
    OutlinedTextField(
        value = selectedText,modifier = Modifier.fillMaxWidth()
            .onSizeChanged {
                dropDownWidth = it.width
            },modifier = Modifier
                .width(with(LocalDensity.current){dropDownWidth.toDp()})
    ) {
        suggestions.forEach { label ->
            DropdownMenuItem(onClick = {
                selectedText = label
            }) {
                Text(text = label)
            }
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。