Ответ 1
В манифесте xml
android:windowSoftInputMode="stateAlwaysHidden"
Он автоматически скроет мягкую клавиатуру при закрытии
Dialog
Я хочу скрыть мягкую клавиатуру после отключения 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);
}
});
В манифесте xml
android:windowSoftInputMode="stateAlwaysHidden"
Он автоматически скроет мягкую клавиатуру при закрытии
Dialog
Вы можете найти решение здесь:
http://www.workingfromhere.com/blog/2011/04/27/close-hide-the-android-soft-keyboard/
ИЛИ здесь:
Я встретил ту же проблему. Решил это, делая это. Он не требует ссылки:
imm.hideSoftInputFromWindow(getWindow().getDecorView()
.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
У меня была аналогичная проблема при закрытии диалогового окна предупреждения. Кажется, это делает трюк для меня.
Внутри вашего диалогового окна
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);
}
}
Я использую этот метод:
IBinder token = searchTextEntry.getWindowToken();
( ( InputMethodManager ) getSystemService( Context.INPUT_METHOD_SERVICE ) ).hideSoftInputFromWindow( token, 0 );
Где searchTextEntry
- это имя моей ссылки EditText
.
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();
}
У меня были проблемы со всеми этими решениями, но если вы работаете с фрагментом, в соответствии с @amal-dev-si в этой теме: Как скрыть клавиатуру при закрытии диалогового окна
Я просто добавил это к своему фрагменту, и это сработало после вызова dismiss() в диалоге:
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
И мне посчастливилось добавить вышеупомянутое (удаление getActivity()) к onResume() родительского действия, если оно находится внутри действия.
Этот ответ решает проблему скрытия мягкой клавиатуры из диалогового окна, даже если нет текстового текста с редактированием
Все эти советы для использования InputMethodManager
несколько расплывчаты - где именно назвать это, и они не работают, по крайней мере, для меня.
Да, клавиатура исчезает, но потом приложение падает!?
Основная проблема заключается в том, что скрытие клавиатуры происходит одновременно с исчезновением диалога.
Чтобы избежать этого, dialog.dismiss()
следует вызывать в view.postDelayed()
после imm.hideSoftInputFromWindow()
, и в моем случае я устанавливаю задержку как 150.
Это работает! Это закроет клавиатуру после закрытия диалогового окна
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);