Android更改片段时隐藏键盘

时间:2013-02-04 23:19:06

标签: android

当我改变片段时。我使用它关闭键盘,因为屏幕上有一个EditText字段。我觉得必须有一个更好的方法,但我没有找到任何关于检测键盘是否在屏幕上的信息。

Activity activity = getActivity();
InputMethodManager inputMethodManager = (InputMethodManager)  activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
try
{
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}
catch (Exception e)
{

}

3 个答案:

答案 0 :(得分:3)

在您实现调用各种片段的活动中,请输入以下内容......

    InputMethodManager imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);

答案 1 :(得分:0)

我能想到的唯一真正的方法是使用onConfigurationChanged(Configuration config)方法:

KeyboardHiddenConfiguration的组合应该这样做。

class MyFrag extends Fragment{

  @Override
  public void onConfigurationChanged(Configuration config){
    //Check flags
    switch(config.keyboardHidden){
      case KEYBOARDHIDDEN_NO:
        // do something
        break;
      case KEYBOARDHIDDEN_YES:
        break;
    }
  }

}

这当然依赖于你有清单和父活动来接受这些作为配置更改:

<activity ...
  android:configChanges="keyboardHidden|orientation|screenSize|screenLayout"/>

另外,您会注意到Activity具有相同的可覆盖方法,该活动将首先获取该方法,然后将其传递给附加的Fragment

对于观察者,您可以使用上下文动态执行此操作:

Configuration config = getResources().getConfiguration();

希望有所帮助,这也意味着考虑到hardKeyboards,但我确定你会遇到一些设备特定的bug!

答案 2 :(得分:0)

您可以在暂停方法中使用以下代码:

@Override
protected void onPause() {
    super.onPause();

    final InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
    if (inputMethodManager != null && inputMethodManager.isActive()) {
        if (getCurrentFocus() != null) {
            inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        }
    }
}