windowSoftInputMode 在 Android M 中无效
Posted
技术标签:
【中文标题】windowSoftInputMode 在 Android M 中无效【英文标题】:windowSoftInputMode has no effect in Android M 【发布时间】:2015-08-27 02:38:11 【问题描述】:我在 androidManifest
中设置了 android:windowSoftInputMode="adjustNothing"
的 MainActivity。主题有父Theme.AppCompat.Light.NoActionBar
。我向这个活动添加一个 DialogFragment 并在其中显示一个 AlertDialog,然后在片段内设置 alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
。
现在,在 Android 5.1.1 上,它可以按预期工作。创建对话框时,键盘不会自动显示。当用户点击对话框内的 EditText 时,键盘会弹出并调整 Activity 的大小,使其不会重叠。
问题在于,在 Android M 上,这不会发生。创建对话框时确实没有显示键盘,但是当用户触摸EditText后弹出它时,它会与对话框重叠。
知道为什么在 M 上会发生这种情况,但在以前的版本上一切正常吗?
编辑: 显然,在创建一个只有基本问题的 HelloWorld 项目后,我发现以下 2 个活动主题元素会导致键盘无法调整大小。如果有人对此事有任何永久解决方案,我会全神贯注(或者更确切地说是眼睛)。
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">true</item>
</style>
【问题讨论】:
你不觉得这么早版本的开发者操作系统可能有问题吗? 嗯,就是这样。我不知道。它可能确实像你说的那样是一个错误。可能不是。我尝试与框架上的一些人取得联系但没有得到答案,所以我想在这里问一下,也许有人有一个值得研究的想法。我想没什么大不了的...... 好吧,我在早期的 android 版本上遇到了类似的问题。在我的情况下,键盘在对话框后面打开并且不可用。我想这是类似的东西。 你能提供一个小而完整的例子来说明这个问题吗?所谓“小”,我的意思是它绝对不应该包含与手头的问题无关的代码。 “完成”是指其他任何人都应该能够将其导入到他们的开发环境(如 Android Studio)中,编译并运行,并准确查看您所询问的行为。 @Code-Apprentice 感谢您提出这个想法。我开始了一个新项目,只有应用程序有问题的部分,我想我已经弄清楚是什么原因造成的。显然 android:windowDrawsSystemBarBackgrounds = true 和 android:windowTranslucentStatus = true 在活动主题内设置导致对话框不调整大小。我不确定与 L 相比发生了什么变化,这导致了这个问题。可能是一个错误,可能只是一个变化。为了以防万一,我还应该上传示例项目吗?如果是这样,知道我可以把它上传到哪里供大家查看吗? 【参考方案1】:我发现活动主题中的以下 2 行会导致键盘无法调整大小。
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">true</item>
</style>
目前,这是一个快速修复。如果有人有永久解决方案来保留这两条线但也解决了问题,请发布另一个答案。
【讨论】:
我用这两行测试过,似乎 android:windowTranslucentStatus 是唯一的罪魁祸首。 ***.com/questions/21092888/…以上是关于windowSoftInputMode 在 Android M 中无效的主要内容,如果未能解决你的问题,请参考以下文章
android - windowSoftInputMode 问题
我的Android进阶之旅------>Android中android:windowSoftInputMode的使用方法