首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SOFT_INPUT_ADJUST_RESIZE不赞成启动android 30

SOFT_INPUT_ADJUST_RESIZE不赞成启动android 30
EN

Stack Overflow用户
提问于 2021-06-16 12:58:09
回答 5查看 10.8K关注 0票数 9

当键盘弹出时,我使用SOFT_INPUT_ADJUST_RESIZE来显示所有内容。在下面的文档中,我添加了新的代码片段:

代码语言:javascript
运行
复制
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    requireActivity().window.setDecorFitsSystemWindows(false)
}

代码语言:javascript
运行
复制
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
}

由于某些原因,如果键盘是否出现,视图不会根据实际情况调整大小。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2021-06-16 13:26:06

你能试着做以下工作吗,我想我们现在必须手动添加键盘的填充。

代码语言:javascript
运行
复制
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)
        val insets = windowInsets.getInsets(WindowInsets.Type.ime() or WindowInsets.Type.systemGestures())
        insets
    }

    windowInsets
}
票数 5
EN

Stack Overflow用户

发布于 2021-12-31 11:20:45

根据Android API 30的google开发人员,他们已经不推荐它了,并为我们提供了一个解决方案setDecorFitsSystemWindows.。但是这不能在Android 30下工作,对于30岁以下的人来说,你必须使用和以前一样的方法。

它是如何工作的:当setDecorFitsSystemWindows是真时,框架将检查SYSTEM_UI_LAYOUT_FLAGS以及WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE标志,并根据这些标志对内容进行匹配。

但是,当它被设置为False时,框架将不适合insets的content视图,并将检查您的WindowInsets来设置内容视图。

首先,您必须定义可以使用的windowsInsets。

代码语言:javascript
运行
复制
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时,设置为false

代码语言:javascript
运行
复制
setDecorFitsSystemWindows(false)

当您想要返回到正常集true时

代码语言:javascript
运行
复制
setDecorFitsSystemWindows(true)

管理API 30以上及以下的使用条件

代码语言:javascript
运行
复制
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 setDecorFitsSystemWindows

票数 13
EN

Stack Overflow用户

发布于 2022-01-25 01:43:47

最简单的解决方案是向AndroidManifest.xml添加以下内容。

代码语言:javascript
运行
复制
<activity
    android:name=".MyActivity"
    android:windowSoftInputMode="adjustResize" />
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68003131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档