Activity弹自定义Dialog,有输入框时键盘顶起后面的Activity

============================
原创,转载请指明出处(http://blog.xinspace.space)。

问题

Dialog的需求:需要背景是白色,不是Android的默认透明半黑色。

于是Dialog使用了自定义主题,并用Dialog的自定义View覆盖整个屏幕,修改自定义View根布局的背景为白色半透明。此时如果Dialog中输入框,弹出键盘后,会导致背后的Activity被顶上去(因为背景是白色半透明,因此能看到背后的Activity)。

尝试过的解决方案有:

  1. 在AndroidManifest.xml文件中,定义相关Activity处添加属性android:windowSoftInputMode的值为adjustPanadjustResize
  2. 考虑到Dialog是自定义的,弹出后导致背后Activity的windowSoftInputMode属性失效,在Dialog中尝试添加了dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);。但是都不奏效。

解决方案

  1. 在AndroidManifest.xml文件Activity定义处添加属性android:windowSoftInputMode的值为adjustNothing
  2. 在Dialog定义的代码中,添加dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);

具体的原因还未分析出来。