我是在Fragment中实现的,在网上查了,有的说要回调Activity的onTouch事件,通过实验直接在Fragment中即可。如下:
我的EditText在ScrollView,因为ScrollView本身已经设置onTouch事件,并不抛出,所以必须监听ScrollView的onTouch事件
开始和点击其他地方如图:
点击EditText时如图:
具体代码:
EditText:edtTxt_personal_nicknameScrollView: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); } }
时间: 2024-10-05 07:27:25