标签: android-compose-exposeddropdown

Jetpack Compose ExusedDropdownMenu 按下时不显示

我正在开发 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

16
推荐指数
1
解决办法
5008
查看次数

Jetpack Compose 中的可编辑动态 ExusedDropDownMenuBox

我试图让这个下拉菜单变得动态。当我在文本字段中输入内容时,我希望列表能够更新(根据用户输入的内容进行过滤),并且用户可以从过滤后的下拉列表中进行选择。

我在这里检查了开发文档中的示例代码 https://developer.android.com/reference/kotlin/androidx/compose/material3/package-summary#ExposeDropdownMenuBox(kotlin.Boolean,kotlin.Function1,androidx.compose .ui.修饰符,kotlin.Function1)

我发现材质 3 下拉菜单在展开状态下会阻止用户输入。如果用户开始输入并且我们说

onValueChange = { 
        selectedOptionText = it
        expanded = true
}
Run Code Online (Sandbox Code Playgroud)

用户被阻止进一步输入,因为展开的 ExposedDropdownMenu 会阻止用户输入

如何使文本字段动态打开下拉菜单,并根据用户输入更新列表?并且列表项是可选的

为了添加更多上下文,我知道如果我们说properties = PopupProperties(focusable = false),DropdownMenu不会阻止用户输入

DropdownMenu(
            expanded = expanded,
            onDismissRequest = { expanded = false },
            properties = PopupProperties(focusable = false)
        )
Run Code Online (Sandbox Code Playgroud)

但 UI 行为并不相同。我正在寻找 DropdownMenuBox 行为 DropdownMenu 属性 = PopupProperties(focusable = false)

android-jetpack-compose android-compose-textfield android-jetpack-compose-material3 android-compose-exposeddropdown

7
推荐指数
1
解决办法
2393
查看次数

导航到另一个片段时,ExpedDropdownMenu 扩展会使应用程序崩溃

我有两个ExposedDropdownMenu在一个屏幕内有两个按钮,可以触发导航到不同的屏幕。

目前,我正在为这次崩溃而苦苦挣扎:

java.lang.IllegalArgumentException: View=androidx.compose.material.internal.PopupLayout{c8ce24f V.E...... ......ID 0,0-960,192 #1020002 android:id/content} not attached to window manager
    at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:544)
    at android.view.WindowManagerGlobal.updateViewLayout(WindowManagerGlobal.java:433)
    at android.view.WindowManagerImpl.updateViewLayout(WindowManagerImpl.java:118)
    at androidx.compose.material.internal.PopupLayout.updatePosition(ExposedDropdownMenuPopup.kt:360)
    at androidx.compose.material.internal.PopupLayout.onGlobalLayout(ExposedDropdownMenuPopup.kt:469)
    at android.view.ViewTreeObserver.dispatchOnGlobalLayout(ViewTreeObserver.java:1061)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2987)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1950)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8186)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1056)
    at android.view.Choreographer.doCallbacks(Choreographer.java:878)
    at android.view.Choreographer.doFrame(Choreographer.java:811)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1041)
    at android.os.Handler.handleCallback(Handler.java:938)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:223)
    at android.app.ActivityThread.main(ActivityThread.java:7743)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:952)
Run Code Online (Sandbox Code Playgroud)

我已经尝试将 DropDown 状态提升到 ViewModel 并在导航之前折叠它,但导航的处理速度仍然比 DropDown 折叠的速度快。

目前我的应用程序正处于 Compose 迁移过程中,因此我使用 Fragments 来保存可组合项并使用导航组件进行导航。

android-jetpack-compose android-compose-exposeddropdown android-compose-dropdownmenu

6
推荐指数
1
解决办法
541
查看次数