对话框消失后弹出的输入框不隐藏

  最近遇到在一个项目中使用带输入框的自定义对话框时,在确认或取消对话框后,对话框消失了但输入法依旧显示,而在另外一个项目使用就正常的问题。经过排查发现是Manifest.xml配置问题。主要原因是下面这句配置

<activity android:name=".ui.XXXActivity"
            android:windowSoftInputMode="stateHidden">
 </activity>

既然找到原因那么解决办法就很多了。
1、去掉windowSoftInputMode这个配置
2、stateHidden改为stateAlwaysHidden
3、优化自定义对话框,在对话框消失时强制隐藏输入法
第3中方法只需要在自定义对话框中增加以下代码即可

    @Override
    public void dismiss() {
        hideKeyboard();
        super.dismiss();
    }

    public void hideKeyboard() {
        InputMethodManager imm = (InputMethodManager) getContext()
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm.isActive()) {
            imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        }
    }

下面我们再复习以下windowSoftInputMode这个属性,官网上是这么说的:
  Activity 的主窗口与包含屏幕软键盘的窗口之间的交互方式。该属性的设置会影响两点内容:
  当 Activity 成为用户注意的焦点时,软键盘的状态为隐藏还是可见。
  对 Activity 主窗口所做的调整 — 是否将其尺寸调小,为软键盘腾出空间;或当软键盘遮盖部分窗口时,是否平移其内容以使当前焦点可见。
  该设置必须是下表所列的其中一项值,或一个“state...”值加上一个“adjust...”值的组合。在任一组中设置多个值(例如,多个“state...”值)均会产生未定义的结果。各值之间使用竖线 (|) 进行分隔。

描述
“stateUnspecified” 不指定软键盘的状态(隐藏还是可见)。系统会选择合适的状态,或依赖主题中的设置。这是对软键盘行为的默认设置。
“stateUnchanged” 当 Activity 转至前台时保留软键盘最后所处的任何状态,无论是可见还是隐藏。
“stateHidden” 当用户选择 Activity 时(换言之,当用户确实是向前导航到 Activity,而不是因离开另一 Activity 而返回时)隐藏软键盘。
“stateAlwaysHidden” 当 Activity 的主窗口有输入焦点时始终隐藏软键盘。
“stateVisible” 在正常的适宜情况下(当用户向前导航到 Activity 的主窗口时)显示软键盘。
“stateAlwaysVisible” 当用户选择 Activity 时(换言之,当用户确实是向前导航到 Activity,而不是因离开另一 Activity 而返回时)显示软键盘。
“adjustUnspecified” 不指定 Activity 的主窗口是否通过调整尺寸为软键盘腾出空间,或者是否通过平移窗口内容以在屏幕上显示当前焦点。根据窗口的内容是否存在任何可滚动其内容的布局视图,系统会自动选择其中一种模式。如果存在这种视图,系统会调整窗口尺寸,前提是可通过滚动操作在较小区域内看到窗口的所有内容。这是对主窗口行为的默认设置。
“adjustResize” 始终调整 Activity 主窗口的尺寸,以为屏幕上的软键盘腾出空间。
“adjustPan” 不通过调整 Activity 主窗口的尺寸为软键盘腾出空间。相反,窗口的内容会自动平移,使键盘永远无法遮盖当前焦点,以便用户始终能看到自己输入的内容。这通常不如调整窗口尺寸可取,因为用户可能需关闭软键盘才能进入被遮盖的窗口部分,并与之进行交互。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容