点击EditText可编辑,点击其他地方不可编辑

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

  

原文地址:https://www.cnblogs.com/qixing/p/3978540.html