当material3中的DropdownMenu出现时,导航栏会弹出

问题描述 投票:0回答:1

我的 Activity 带有隐藏的导航栏和纯 Compose 内容。它按预期工作,直到显示 androidx.compose.material3.DropdownMenu。此时导航栏回来了,当菜单关闭时它再次隐藏。然后我就做了

DropdownMenu(properties = PopupProperties(dismissOnBackPress = false))
。现在,当菜单出现时,导航栏会弹出,并通过动画快速隐藏起来。

@Composable
fun MenuSample(onSearch: () -> Unit) {
    var expanded by remember { mutableStateOf(false) }
    DropdownMenu(
        expanded = expanded,
        onDismissRequest = { expanded = false },
        properties = PopupProperties(dismissOnBackPress = false)
    ) {
        DropdownMenuItem(
            text = { Text("Search") },
            onClick = onSearch,
            leadingIcon = {
                Icon(
                    Icons.Outlined.Search,
                    contentDescription = null
                )
            })
    }
}

导航栏缺失的配置如下:

class MyActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        WindowInsetsControllerCompat(window, window.decorView).let { controller ->
            controller.hide(WindowInsetsCompat.Type.navigationBars())
            controller.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
        }

        setContent {
            MyJetpackContent()
        }
    }
}

如何正确防止导航栏显示在第一位?

android android-compose
1个回答
0
投票

这是因为 DropDownMenu 就行为而言被视为弹出窗口。就像用户正在与屏幕交互一样。

使用可组合的 SideEffect 在显示或不显示时与 DropDownMenu(来自 MenuSample)创建反应,以避免显示导航栏。

示例:

将 SideEffect 添加到 MenuSample 函数中,并在调用 MenuSample 时将窗口对象作为参数。 有关更多详细信息,请查看文档。

@Composable
fun MenuSample(onSearch: () -> Unit, window: Window) {
    var expanded by remember { mutableStateOf(false) }

    SideEffect {
     WindowInsetsControllerCompat(window, window.decorView).let { controller ->
        controller.hide(WindowInsetsCompat.Type.navigationBars())
        controller.systemBarsBehavior = 
           WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
     }
    }

    DropdownMenu(
        expanded = expanded,
        onDismissRequest = { expanded = false },
        properties = PopupProperties(dismissOnBackPress = false)
    ) {
        DropdownMenuItem(
            text = { Text("Search") },
            onClick = onSearch,
            leadingIcon = {
                Icon(
                    Icons.Outlined.Search,
                    contentDescription = null
                )
            })
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.