Android中设置EditText获得焦点时不弹出软键盘

默认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触发的调用过程。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyjjwg.html