Прочитав все ответы выше и в другом посте, мне все равно не удалось автоматически открыть клавиатуру.
В моем проекте я создал диалог (AlertDialog
) динамически (программируя его без или с минимумом необходимого XML).
Итак, я делал что-то вроде:
dialogBuilder = new AlertDialog.Builder(activity);
if(dialogBuilder==null)
return false; //error
inflater = activity.getLayoutInflater();
dialogView = inflater.inflate(layout, null);
...
И после завершения настройки всех представлений (TextView, ImageView, EditText и т. Д.) Я сделал:
alertDialog = dialogBuilder.create();
alertDialog.show();
Поиграв со всеми ответами, я обнаружил, что большинство из них работают ЕСЛИ вы знаете ГДЕ , чтобы поставить запрос ... И это был ключ ко всем.
Итак, хитрость заключается в том, чтобы поставить его ДО при создании диалога: alertDialog.show()
в моем случае это сработало как шарм:
alertDialog = dialogBuilder.create();
alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
//And only when everything is finished - let's bring up the window -
alertDialog.show();
//Viola... keyboard is waiting for you open and ready...
//Just don't forget to request focus for the needed view (i.e. EditText..)
Я совершенно уверен, что этот принцип одинаков для всех окон, поэтому обратите внимание на расположение вашего кода "showKeyboard" - это должно быть до запуска окна.
Небольшой запрос от команды разработчиков Android SDK:
Я думаю, что все это не нужно, поскольку тысячи программистов со всего мира имеют дело с этой нелепой и тривиальной проблемой, а ее решение должно быть простым и понятным:
ИМХО, если я получу requestFocus()
в представлении, ориентированном на ввод (например, EditText
), клавиатура должна открыться автоматически, если пользователь не спросит не, поэтому, я думаю, что метод requestFocus () является ключом здесь и должен принять логическое showSoftKeyboard со значением по умолчанию true
: View.requestFocus(boolean showSoftKeyboard);
Надеюсь, это поможет другим, таким как я.