我用了SOFT_INPUT_ADJUST_RESIZE
为了在键盘弹出时显示所有内容。
按照文档,我添加了新的代码 fragment :
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
requireActivity().window.setDecorFitsSystemWindows(false)
}
和binding.constraintLayoutRoot.setOnApplyWindowInsetsListener { _, windowInsets ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
val insets = windowInsets.getInsets(WindowInsets.Type.ime() or WindowInsets.Type.systemGestures())
insets
}
windowInsets
}
出于某种原因, View 不会根据键盘是否出现来调整大小。
最佳答案
根据来自 Android API 30 的谷歌开发人员,他们已弃用它并向我们提供了解决方法 setDecorFitsSystemWindows .但这在 Android 30 以下不起作用,对于 30 以下,您必须使用与以前相同的方法。
工作原理:
当 setDecorFitsSystemWindows 是 真实
框架将检查 SYSTEM_UI_LAYOUT_FLAGS 以及 WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE 标志并根据这些标志适合内容。
但是当它设置为 错误 该框架将不适合 insets 的内容 View ,并将检查您的 WindowInsets 以设置内容 View 。
首先,您必须定义它可以使用的 windowsInsets
binding.root.setOnApplyWindowInsetsListener { _, windowInsets ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
val imeHeight = windowInsets.getInsets(WindowInsets.Type.ime()).bottom
binding.root.setPadding(0, 0, 0, imeHeight)
}
windowInsets
}
然后当你希望你的屏幕使用 ADUST_RESIZE 设置为假setDecorFitsSystemWindows(false)
当你想恢复正常设置 truesetDecorFitsSystemWindows(true)
管理 API 30 以上和以下使用条件var shouldResize = false // false will resize
binding.button.setOnClickListener {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
window.setDecorFitsSystemWindows(shouldResize)
shouldResize = shouldResize.not()
} else {
if (shouldResize.not()) {
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
} else {
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
}
}
}
引用链接:Android SOFT_INPUT_ADJUST_RESIZE
Android setDecorFitsSystemWindows
关于android - SOFT_INPUT_ADJUST_RESIZE 从 android 30 开始弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68003131/