默认EditText在获得焦点时,会弹出软键盘,如果想实现当EditText获得焦点时,直接弹出对话框,像时间对话框,而不要弹出软键盘,该如何禁卡弹出软键盘?
方法:即onCreate()中调用EditText实例的setInputType(InputType.TYPE_NULL),xml文件中定义EditText时,指定的android:inputType="??",??可以任意。
/** Init date EditText. */
View.OnTouchListener dateEditTextOnTouchListener = new EditTextOnTouchListener(
DATE_DIALOG);
mDateEditText.setOnTouchListener(dateEditTextOnTouchListener);
mDateEditText.setInputType(InputType.TYPE_NULL);
/** Init time start/end EditText. */
View.OnTouchListener timeStartEditTextOnTouchListener = new EditTextOnTouchListener(
TIME_START_DIALOG);
mTimeStartEditText.setOnTouchListener(timeStartEditTextOnTouchListener);
mTimeStartEditText.setInputType(InputType.TYPE_NULL);
View.OnTouchListener timeEndEditTextOnTouchListener = new EditTextOnTouchListener(
TIME_END_DIALOG);
mTimeEndEditText.setOnTouchListener(timeEndEditTextOnTouchListener);
mTimeEndEditText.setInputType(InputType.TYPE_NULL);
private class EditTextOnTouchListener implementsView.OnTouchListener {
private int dialogId = 0;
public EditTextOnTouchListener(int dialogId) {
this.dialogId = dialogId;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
showDialog(dialogId);
return false;
}
}
因为要实现弹出对话框,试过如果不用上面的OnTouchListener而是用OnClickListener时,会有一个现象:即,当EditText从没有获得焦点到第一次获得焦点时,不会弹出对话框,只有在EditText已经获得焦点的情况下再去点击EditText,此时才会弹出对话框。但是如果不设置OnClickListener,而是设置成OnTouchListener则第一次获得焦点时就会弹出对话框。
注:上面的部分源码没有包括:
/** Invoked by showDialog indirectly. */
protected Dialog onCreateDialog(int id) {
......
}
这个onCreateDialog是在调用了showDialog后,解发的。细节可以参看Activity.class里面的showDialog触发的调用过程。