根据Google开发人员从Android API 30开始,他们已经弃用了该方法并为我们提供了解决方案
setDecorFitsSystemWindows。但是在Android 30以下版本中,此方法不起作用,你必须像以前一样使用相同的方法。
工作原理:当设置
setDecorFitsSystemWindows为
true时,框架将检查
SYSTEM_UI_LAYOUT_FLAGS和WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE标志,并根据这些标志调整内容。
但是当它设置为
false时,框架将不会将内容视图适应到嵌入式区域,并会检查你的WindowInsets来设置内容视图。
首先,你必须定义可以使用的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
}
当你想要你的屏幕使用ADJUST_RESIZE时,请将其设置为false。
setDecorFitsSystemWindows(false)
当您想回到正常状态时,请将其设置为true
setDecorFitsSystemWindows(true)
管理 API 30 及以上和以下使用条件
var shouldResize = false
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
shouldResize
更新为shouldResize = shouldResize.not()
的目的是什么? - Bitwise DEVS