Скрыть клавиатуру в AlertDialog

У меня есть alertdialog с editext. Для этого Edittext я создаю клавиатуру, и я хочу, чтобы пользователь нажал ok или отменил, чтобы скрыть клавиатуру. Странная проблема заключается в том, что когда пользователь выбирает ok, клавиатура скрыта, но когда вы выбираете отмену, клавиатура не скрывает, что я использую тот же код для обоих случаев.

Вот мой код:

final AlertDialog.Builder alert = new AlertDialog.Builder(this); alert.setTitle(data); final EditText input = new EditText(this); InputFilter[] FilterArray = new InputFilter[1]; FilterArray[0] = new InputFilter.LengthFilter(25); input.setFilters(FilterArray); input.postDelayed(new Runnable() { @Override public void run() { InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); keyboard.showSoftInput(input, 0); } },200); alert.setView(input); alert.setPositiveButton(ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { text = input.getText().toString().trim(); Canvas c = new Canvas(bitmapResult); drawTextImage(bitmapResult); saveimage(); InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(input.getWindowToken(), 0); } }); alert.setNegativeButton(cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.cancel(); saveimage(); InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(input.getWindowToken(), 0); } }); alert.show(); 

Где мой мистик? Может кто-нибудь мне помочь?

Solutions Collecting From Web of "Скрыть клавиатуру в AlertDialog"

Я нашел решение:

 alert.setNegativeButton(cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { saveimage(); InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(input.getWindowToken(), 0); dialog.cancel(); } }); 

Я должен был поставить dialog.cancel () после того, как скрою клавиатуру.

Я тоже боролся с этим и похлопал головой о почти каждое «решение», которое было опубликовано, но проклятая клавиатура все равно не закрылась. Затем у меня было озадаченное видение:

  InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(dialog.getWindow().getDecorView().getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY); } 

Обратите внимание на HIDE_IMPLICIT_ONLY

Надеюсь, что это поможет кому-то еще бороться с этой проблемой.

Не уверен, но вы можете попробовать добавить это:

 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

Я использую его, чтобы избежать первого отображения клавиатуры при запуске моего приложения … когда я нажимаю в поле, клавиатура все еще открывается …

Таким образом, возможно, он мог бы работать с вашим кодом:

 keyboard.showSoftInput(input, 0); 

И затем автоматически закройте его …

Используйте следующий метод, прежде чем использовать dialog.cancel();

 public static void hideSoftKeyboardUsingView(Context context,View view) { InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); }