Android如何在对话框中处理软键盘隐藏/显示

时间:2014-07-18 11:09:04

标签: android android-softkeyboard

由于对话框中的焦点更改,当系统显示/隐藏软键盘时,是否重新启动了对话框的主机活动?

我的应用程序是Fragment-Driven。我有很多片段。我的一个片段触发了一个打开对话框的动作。在该对话框中,有输入字段,当我点击该输入字段时,主机片段上的UI的所有状态(实际上所有片段,因此必须影响主要活动)被重置。在我的活动中,我已经说过了。

android:configChanges="keyboardHidden|orientation|screenSize"

所以,正确的说,即使在Activity上显示软键盘,它也不应该重新启动。

我认为我不需要输入任何代码,因为它完全基于软键盘上Android控件显示/隐藏的逻辑。

编辑:我的问题不是如何隐藏软键盘。我的问题是当软键盘出现时如何处理LifeCycle重启。

2 个答案:

答案 0 :(得分:1)

实际问题是,在我的基础活动中,我有ListView。因此,当软键盘出现时,系统会检查来自主机活动的视图并尝试PAN那些ListView。

因此,调用了ListView的适配器的getView(..),并且UI状态表明ListView中的项目已刷新。

如果你输入了

,当软键盘出现时,活动或片段没有重新启动
android:configChanges="keyboardHidden|orientation|screenSize"

在您的活动或应用程序中。

暂时,我通过

解决了这个问题
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);

在我的主持人活动中。当软键盘出现时,它不会调整活动的UI大小/平移。但是,对我来说没问题。我的所有UI内部活动或片段都没有请求来自用户的任何输入。所有输入都使用单独的Dialog UI进行请求。

以上代码不会影响Dialog上的resize / pan。但是,如果你想确定,请把它放在你的Dialog子类中。

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

我不确定这是否是可取的方式。但是,它适合我的情况,因为这是我的问题,我觉得我有义务在找到解决方案时回答这个问题。

答案 1 :(得分:0)

请使用此方法隐藏您的软键盘。从onactivity结果中调用此方法。

public static void hideSoftKeyboard(Activity context) {
        InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (inputManager != null)
        inputManager.hideSoftInputFromWindow(context.getWindow().getDecorView().getApplicationWindowToken(), 0);
        context.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

    }