当我改变片段时。我使用它关闭键盘,因为屏幕上有一个EditText字段。我觉得必须有一个更好的方法,但我没有找到任何关于检测键盘是否在屏幕上的信息。
Activity activity = getActivity();
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
try
{
inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}
catch (Exception e)
{
}
答案 0 :(得分:3)
在您实现调用各种片段的活动中,请输入以下内容......
InputMethodManager imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);
答案 1 :(得分:0)
我能想到的唯一真正的方法是使用onConfigurationChanged(Configuration config)
方法:
KeyboardHidden和Configuration的组合应该这样做。
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);
}
}
}