Jetpack Compose - AlertDialog 的 imePadding()

Pas*_*nik 4 android android-alertdialog android-jetpack-compose

我面临的问题是我需要AlertDialog某种列表项(例如 LazyColumn)并TextField在这些项中进行搜索。即使打开键盘,我也想显示所有对话框布局。但我得到的是一个键盘,它覆盖了对话框布局本身的某些部分。我尝试用于imePadding()Dialog,Modifier但似乎 Dialog 忽略了这一点。我在互联网上没有找到任何解决方案。

我的代码看起来像这样:

AlertDialog(
    modifier = Modifier.fillMaxWidth()
        .padding(AppTheme.margins.edge)
        .imePadding(),
    onDismissRequest = {
        searchText = TextFieldValue("")
        viewModel.clearSearchQuery()
        dismissCallback?.invoke()
    },
    text = {
           Column(
                modifier = Modifier.wrapContentHeight()
            ) {
                Text(
                    text = stringResource(R.string.dlg_select_content_title),
                    style = AppTheme.textStyles.hugeTitleText
                )
                OutlinedTextField(
                    modifier = Modifier
                        .fillMaxWidth()
                        .padding(top = AppTheme.margins.divRegular),
                    value = searchText,
                    placeholderText = stringResource(R.string.dlg_select_content_search_placeholder),
                    onValueChange = { newValue ->
                        searchText = newValue
                        viewModel.onSearchTextTyped(newValue.text)
                    }
                )

                RadioGroup(
                    modifier = Modifier
                        .verticalScroll(rememberScrollState()),
                    options = labels.map {
                        RadioOption(
                            title = it.name,
                            description = null,
                            selected = vmState.selectedLabel?.id == it.id,
                            tag = it.id
                        )
                    },
                    onOptionSelected = {
                        searchText = TextFieldValue("")
                        viewModel.clearSearchQuery()
                        viewModel.saveLabelSelection(it.tag as Int) {
                            dismissCallback?.invoke()
                        }
                    }
                )
            }
    },
    properties = DialogProperties(
        usePlatformDefaultWidth = false
    ),
    confirmButton = {
        // Nothing
    }
)
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

我无法与列表中的最后几个项目进行交互,因为键盘覆盖了它。

The*_*rer 7

从 Compose UI 1.3.0-beta01 开始,您可以设置DialogProperties.decorFitsSystemWindowsfalse并且imePadding()可以工作。

https://issuetracker.google.com/issues/229378542 https://developer.android.com/jetpack/androidx/releases/compose-ui#1.3.0-beta01

AlertDialog(
     modifier = Modifier.imePadding(),
     properties = DialogProperties(decorFitsSystemWindows = false),
     onDismissRequest = {
         // ...
     },
     title = {
         // ...
     },
     text = {
         // ...
     },
     confirmButton = {
         // ..
     },
)
Run Code Online (Sandbox Code Playgroud)