Подтвердить что ты не робот

Скрыть мягкую клавиатуру после отклонения диалога

Я хочу скрыть мягкую клавиатуру после отключения 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);
    }
});
4b9b3361

Ответ 1

В манифесте xml

android:windowSoftInputMode="stateAlwaysHidden"

Он автоматически скроет мягкую клавиатуру при закрытии Dialog

Ответ 3

Я встретил ту же проблему. Решил это, делая это. Он не требует ссылки:

imm.hideSoftInputFromWindow(getWindow().getDecorView()
                .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

Ответ 4

У меня была аналогичная проблема при закрытии диалогового окна предупреждения. Кажется, это делает трюк для меня.

Внутри вашего диалогового окна

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);
    }
}

Ответ 5

Я использую этот метод:

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

Где searchTextEntry - это имя моей ссылки EditText.

Ответ 6

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();
}

Ответ 7

У меня были проблемы со всеми этими решениями, но если вы работаете с фрагментом, в соответствии с @amal-dev-si в этой теме: Как скрыть клавиатуру при закрытии диалогового окна

Я просто добавил это к своему фрагменту, и это сработало после вызова dismiss() в диалоге:

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)

И мне посчастливилось добавить вышеупомянутое (удаление getActivity()) к onResume() родительского действия, если оно находится внутри действия.

Ответ 9

Все эти советы для использования InputMethodManager несколько расплывчаты - где именно назвать это, и они не работают, по крайней мере, для меня.
Да, клавиатура исчезает, но потом приложение падает!?
Основная проблема заключается в том, что скрытие клавиатуры происходит одновременно с исчезновением диалога.

Чтобы избежать этого, dialog.dismiss() следует вызывать в view.postDelayed() после imm.hideSoftInputFromWindow(), и в моем случае я устанавливаю задержку как 150.

Ответ 10

Это работает! Это закроет клавиатуру после закрытия диалогового окна

InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);