принудительно вводить диалог, чтобы требовать полноэкранную программную клавиатуру ime в альбомной ориентации - PullRequest
1 голос
/ 02 марта 2011

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

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

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

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

Спасибо

...