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)
结果:
我无法与列表中的最后几个项目进行交互,因为键盘覆盖了它。
从 Compose UI 1.3.0-beta01 开始,您可以设置DialogProperties.decorFitsSystemWindows为false并且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)
| 归档时间: |
|
| 查看次数: |
2846 次 |
| 最近记录: |