У меня есть диалоговое окно с вводом, я должен автоматически открыть экранную клавиатуру, текущий код:
final EditText input = new EditText(this);
final AlertDialog dialog = new AlertDialog.Builder(ScActivity.this)
.setMessage(message)
.setView(input).setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(input.getWindowToken(), 0);
// do positive stuff
}
}).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(input.getWindowToken(), 0);
}
}).create();
input.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,
InputMethodManager.HIDE_IMPLICIT_ONLY);
}
}
});
dialog.show();
input.requestFocus();
Это отлично работает, за исключением одного поведения. Когда я в первый раз показываю это окно в ландшафтном режиме, диалоговое окно подпрыгивает вверх, как будто оно пытается освободить место для виртуальной клавиатуры, затем понимает, что места недостаточно, перепрыгивает назад, затем отображается полноэкранная клавиатура с вводом текста).
Похоже на глюк. Не хочу с этим жить. Попробовал делать вещи в другом порядке, делать вещи по таймеру. Каждый раз, после первого, клавиатура появляется сверху, без прыжков. Кто-нибудь знает какой-нибудь обходной путь? Я просто хочу, чтобы программная клавиатура отображалась сверху, в полноэкранном режиме в альбомном режиме (в портретном режиме достаточно места, чтобы диалоговое окно могло двигаться вверх и быть видимым.
Спасибо