kotlin Jetpack编写导航对话框配置

uxhixvfz  于 2023-05-18  发布在  Kotlin
关注(0)|答案(1)|浏览(187)

我有一个NavHost,看起来像这样:

NavHost(
    navController = navController,
    startDestination = Screen.MAIN.route,
    modifier = modifier
) {
    dialog(
        Screen.LOGIN.route,
        dialogProperties = DialogProperties(
            usePlatformDefaultWidth = false,
            dismissOnBackPress = false,
            dismissOnClickOutside = false
        )
    ) { LoginScreen() }
    composable(Screen.MAIN.route) { MainScreen() }
}

对于可组合的屏幕,我可以配置我的MainActivity的windowSoftInputMode来调整大小以及其他参数,如:

WindowCompat.setDecorFitsSystemWindows(window, false)

但是我似乎找不到一种方法来配置我的对话框的显示方式。它似乎使用adjustPan功能,正如我所看到的,当键盘出现时,它会将状态栏向上推。如何配置此对话框,或者如何至少更改上述对话框的windowSoftInputMode?

EDIT我尝试过从上下文访问window,并显式设置所需参数,但似乎没有任何效果

val context = LocalContext.current
SideEffect {
    val window = context.findWindow()!!
    WindowCompat.setDecorFitsSystemWindows(window, false)
    window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
}
ny6fqffe

ny6fqffe1#

在NavHost对话框中,您可以使用LocalView.current.parent as DialogWindowProvider来获取对话框窗口。使用此选项可以设置softInputMode和许多其他属性。

val dialogWindowProvider = LocalView.current.parent as DialogWindowProvider

with(dialogWindowProvider.window) {
    setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
    // ...
}

相关问题