我是在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); } }