我是在Fragment中實現的,在網上查了,有的說要回調Activity的onTouch事件,通過實驗直接在Fragment中即可。如下:
我的EditText在ScrollView,因為ScrollView本身已經設置onTouch事件,並不拋出,所以必須監聽ScrollView的onTouch事件
開始和點擊其他地方如圖:

點擊EditText時如圖:

具體代碼:
EditText:edtTxt_personal_nickname
ScrollView:sv_personal
首先設置EditText的點擊事件:
點擊時觸發可編輯
點擊事件:
case R.id.edtTxt_personal_nickname: //昵稱設置可編輯 setEditTextEditable(edtTxt_personal_nickname, true); break;
點擊其他地方時事件:
sv_personal.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//如果編輯框獲得焦點
if(edtTxt_personal_nickname.isFocused()){
//設置編輯框不可見
setEditTextEditable(edtTxt_personal_nickname, false);
InputMethodManager imm=(InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edtTxt_personal_nickname.getWindowToken(), 0);
}
return false;
}
});
//設置昵稱是否可編輯
private void setEditTextEditable(EditText editText, boolean value){
if (value) {
editText.setFocusableInTouchMode(true);
editText.requestFocus();
editText.setGravity(Gravity.LEFT);
}else {
editText.setFocusableInTouchMode(false);
editText.clearFocus();
editText.setGravity(Gravity.CENTER);
}
}
