заставить диалоговый ввод требовать полноэкранную программную клавиатуру ime в альбомной ориентации

У меня есть диалоговое окно с вводом, у меня автоматически всплывает программная клавиатура, текущий код:

    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();

Это отлично работает, за исключением одного поведения. Первый раз, когда я показываю это окно в ландшафтном режиме, диалоговое окно прыгает вверх, как будто пытается освободить место для программной клавиатуры, затем понимает, что места недостаточно, прыгает обратно вниз, затем показывает полноэкранную клавиатуру ime ( с вводом текста).

Похоже на глюк. Не хочу с этим жить. Пробовали делать что-то в другом порядке, делать что-то по таймеру. Каждый раз подряд после первого клавиатура появляется сверху, без прыжков. Кто-нибудь знает обходной путь? Я просто хочу, чтобы программная клавиатура отображалась сверху, в полноэкранном режиме, в ландшафтном режиме (в портретном режиме достаточно места, чтобы диалоговое окно могло двигаться вверх и быть видимым.

Спасибо


person Jonathan S.    schedule 02.03.2011    source источник