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