如果一个EditText是当前焦点和用户点击DialogFragment的外部; 我想在屏幕上键盘消失。 我可以得到它当DialogFragment被开除这样的工作:
InputMethodManager imm;
public View onCreateView(LayoutInflater inflator, ViewGroup container,
Bundle savedInstanceState) {
imm = (InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
...}
@Override
public void dismiss(){
imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
super.dismiss();
}
但是,如果我尝试当通过触摸dialogfragment之外取消了同样的事情,它不会工作。 我试图通过覆盖onCancel像这样做:
@Override
public void onCancel(DialogInterface dialog){
imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
super.onCancel(dialog);
}
该函数被调用时,外部触摸事件发生,但键盘不会被删除。
我能够子类的对话框,并执行该对话框中的取消代码之前隐藏键盘来解决同样的问题。
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = new Dialog(getActivity(), getTheme()) {
@Override public void cancel() {
if (getActivity() != null && getView() != null) {
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
}
super.cancel();
}
};
return dialog;
}
我试过很多其他方法,包括使用DialogFragment的onCancel和onDimiss听众无济于事。 我认为,问题是,听众异步调用,同时关闭/取消的同步处理; 这样的时候你的监听器被调用来隐藏键盘,窗口令牌不再存在。
这是我做过什么让这最后的工作......我需要不使用键盘的小工具......但使用currentfocus得到windowtoken删除时,用户选择的对话框之外的东西键盘...
@Override
public void onStop() {
// make sure the keyboard goes away when the user selects something outside the view (cancelled outside)
if( Utilities.isValidActivity(this.getActivity())) {
InputMethodManager imm = (InputMethodManager)this.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
// not the search view but the current focus at this point
imm.hideSoftInputFromWindow(this.getActivity().getCurrentFocus().getWindowToken(), 0);
}
super.onStop();
}
我有同样的问题,并通过把这个在AndroidManifest哪里产卵DialogFragment活动下解决它:
android:windowSoftInputMode="stateHidden"
尝试添加onDismissListener
这样。
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
// TODO Auto-generated method stub
dismiss();
}
});
文章来源: How to hide the onscreen keyboard when a DialogFragment is canceled by the setCanceledOnTouchOutside event