48

我想在 AlertDialog 关闭后隐藏软键盘,但它仍然可见。这是我的代码:

alert = new AlertDialog.Builder(MyActivity.this);
imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

alert.setOnDismissListener(new DialogInterface.OnDismissListener() {

    @Override
    public void onDismiss(DialogInterface dialog) {
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    }
});
4

8 回答 8

116

清单 xml

android:windowSoftInputMode="stateAlwaysHidden"

它会在 Dismiss of 时自动隐藏软键盘Dialog

于 2013-12-14T11:40:00.910 回答
17

我遇到了同样的问题。通过这样做解决了它。它不需要任何参考:

imm.hideSoftInputFromWindow(getWindow().getDecorView()
                .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
于 2013-04-08T13:06:13.850 回答
8

关闭警报对话框时我遇到了类似的问题。这似乎对我有用。

在你的 DialogFragment 里面

public static void closeKB(final View view) 
{
    caller.postDelayed(new Runnable() {
        @Override
        public void run() {
            InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }, 1);
}

@Override
public void onDismiss(DialogInterface dialog)
{
    super.onDismiss(dialog);
            View view = getActivity().getCurrentFocus();
    if (view != null)
    {
        closeKB(view);
    }
}
于 2016-05-30T07:26:03.887 回答
7

我使用这种方法:

IBinder token = searchTextEntry.getWindowToken();
( ( InputMethodManager ) getSystemService( Context.INPUT_METHOD_SERVICE ) ).hideSoftInputFromWindow( token, 0 );

我的参考searchTextEntry名称在哪里。EditText

于 2012-07-25T09:22:01.497 回答
4

这行得通!这将在对话框关闭后关闭键盘

InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
于 2019-01-22T12:35:36.930 回答
2
protected void hideKeyboard() {
    final Activity activity = getActivity();
    final View view = activity != null ? activity.getCurrentFocus() : null;
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            if (view != null) {
                InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null)
                    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
            }
        }
    }, 1);
}

@Override
public void onDismiss(DialogInterface dialog) {
    super.onDismiss(dialog);
    hideKeyboard();
}
于 2019-02-14T02:13:28.730 回答
0

所有这些使用建议InputMethodManager都有些模糊 - 确切地在哪里调用它,
它们至少对我不起作用。
是的,键盘消失了,但应用程序崩溃了!?
主要问题是在对话框消失的同时隐藏键盘。

为避免它dialog.dismiss()应该在view.postDelayed()之后调用,imm.hideSoftInputFromWindow()在我的情况下,我将延迟设置为 150。

于 2015-06-14T02:33:22.587 回答
0

如果有人在 kotlin 中寻找这个,它会是:

private fun hideDeviceKeyboard() {
    val imm = context!!.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0)
}
于 2020-11-05T22:13:17.620 回答