Я думаю, что у вас почти все получилось в вашем первоначальном вопросе. Попробуйте создать final AlertDialog
для вызова getWindow()
, например,
// Create the dialog used to modify the mailbox alias
final AlertDialog dialog = alert.create();
inputBox.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
dialog.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
}
});
Я протестировал этот код, и теперь клавиатура автоматически появляется на большинстве моих устройств, включая:
- Samsung Galaxy Tab OS 2.2
- Samsung Galaxy S OS 2.1
- HTC Sensation OS 2.3.4
Некоторые другие комментарии к этому решению:
1) Проверьте, есть ли у вас что-то в вашем XML для запроса фокуса, поскольку это может остановить работу этого кода (согласно Теду в вопросе, на который вы ссылаетесь).
2) Этот код не работает на моем HTC G2 под управлением ОС 2.3.4. Я думаю, это потому, что у него есть физическая клавиатура, и, возможно, опция WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE
не работает с ней?
Я также попробовал SOFT_INPUT_STATE_VISIBLE (без ВСЕГДА), но это остановило автоматическое появление клавиатуры.
3) Вы также можете добавить код, чтобы пользователь мог нажать кнопку «Готово» на клавиатуре, чтобы отправить изменения, например,
inputAlias.setOnKeyListener(new OnKeyListener()
{
@Override
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_ENTER &&
inputAlias.isFocused() &&
inputAlias.getText().length() != 0)
{
// Save the new information here
// Dismiss the dialog
dialog.dismiss();
return true;
}
return false;
}
});