-->

如何隐藏屏幕键盘当DialogFragment由setCanceledOnTouchOutside事

2019-09-01 07:56发布

如果一个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);
}

该函数被调用时,外部触摸事件发生,但键盘不会被删除。

Answer 1:

我能够子类的对话框,并执行该对话框中的取消代码之前隐藏键盘来解决同样的问题。

@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听众无济于事。 我认为,问题是,听众异步调用,同时关闭/取消的同步处理; 这样的时候你的监听器被调用来隐藏键盘,窗口令牌不再存在。



Answer 2:

这是我做过什么让这最后的工作......我需要不使用键盘的小工具......但使用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();
}


Answer 3:

我有同样的问题,并通过把这个在AndroidManifest哪里产卵DialogFragment活动下解决它:

android:windowSoftInputMode="stateHidden"


Answer 4:

尝试添加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