android - SOFT_INPUT_ADJUST_RESIZE 从 android 30 开始弃用

标签 android

我用了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)
当你想恢复正常设置 true
setDecorFitsSystemWindows(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/

相关文章:

android - Ajax请求发送到服务器但返回状态码0

android - 应用程序启动后回压时出现 IllegalArgumentException

java - ImageButton 出来很小。 Java-Android开发

android - 使用 WorkManager 的定期日常工作请求

java - 我想放置一个触摸事件来开始我的游戏

java - 根据屏幕方向在微调器和 ListView 之间切换

android - BitmapFactory.decodeFile 无法解析为类型

Android 4.3 低功耗蓝牙不稳定

android - 如何在 RxJava 发生不同事件时得到通知?

java - 如何通过 android java 发送 google pay "Request"像 amazon bhim pay 在线支付