Android開發中設置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觸發的調用過程。