我正在使用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();
}
不应该立即弹出它吗?
由于
答案 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);