方法:即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触发的调用过程。