IME клавиатура не появляется автоматически для диалога?

1

Я создаю фрагмент диалога, используя AlertDialog.Builder. Я хочу, чтобы у него был только один EditText, чтобы захватить некоторый ввод текста пользователя. Он работает нормально, но клавиатура IME не появляется, как только отображается диалог. EditText уже выбран, но пользователь снова должен нажать EditText, чтобы открыть клавиатуру IME:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    EditText input = new EditText(getActivity());
    return new AlertDialog.Builder(getActivity())
        .setView(input)
        .create();
}

не должно ли оно появляться самостоятельно немедленно?

благодаря

Теги:

2 ответа

2

Нет, видимо, это не поведение по умолчанию. Если вы действительно хотите, чтобы клавиатура появлялась автоматически, имитируйте "нажатие" внутри вашего EditText, вот что сработало для меня (это безопаснее, чем вызов showSoftInput из-за ненадежного поведения requestFocus, плюс вам не нужно микроуровневать клавиатуру):

EditText tv = (EditText)findViewById(R.id.editText);
tv.post(new Runnable() {

            @Override
            public void run() {
                Log.d("RUN", "requesting focus in runnable");
                tv.requestFocusFromTouch();
                tv.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , tv.getWidth(), tv.getHeight(), 0));
                tv.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , tv.getWidth(), tv.getHeight(), 0));
            }
        });

Я думаю, что причина, по которой клавиатура не открывается, заключается в том, что пользователь должен иметь возможность увидеть все окно, прежде чем решать, где начать редактирование в первую очередь.

  • 0
    Меня устраивает. Но симулятор крана выглядит не элегантно для меня. Я наконец нашел другое решение от stackoverflow.com/a/8532417/94148 . Дело в том, что requestFocus () нужно некоторое время, чтобы вступить в силу.
0

попробуй это:

((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE))
    .showSoftInput(viewToEdit, 0);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню