============================
原创,转载请指明出处(http://blog.xinspace.space)。
问题
Dialog的需求:需要背景是白色,不是Android的默认透明半黑色。
于是Dialog使用了自定义主题,并用Dialog的自定义View覆盖整个屏幕,修改自定义View根布局的背景为白色半透明。此时如果Dialog中输入框,弹出键盘后,会导致背后的Activity被顶上去(因为背景是白色半透明,因此能看到背后的Activity)。
尝试过的解决方案有:
- 在AndroidManifest.xml文件中,定义相关Activity处添加属性
android:windowSoftInputMode
的值为adjustPan
或adjustResize
。 - 考虑到Dialog是自定义的,弹出后导致背后Activity的
windowSoftInputMode
属性失效,在Dialog中尝试添加了dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
和dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
。但是都不奏效。
解决方案
- 在AndroidManifest.xml文件Activity定义处添加属性
android:windowSoftInputMode
的值为adjustNothing
。 - 在Dialog定义的代码中,添加
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
具体的原因还未分析出来。