歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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觸發的調用過程。

Copyright © Linux教程網 All Rights Reserved