对话框中没有自动出现IME键盘?

时间:2012-03-19 22:07:18

标签: android

我正在使用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 个答案:

答案 0 :(得分: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));
            }
        });

我认为键盘无法打开的原因是用户必须有机会在决定首先开始编辑之前看到整个窗口。

答案 1 :(得分:0)

试试这个:

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