Scrollview 嵌套editext 会导致Scrollview 滑动困难 解决方法
在Scrollview 嵌套editext 的activity中重写 onTouch方法
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
switch (arg0.getId()) {
case R.id.activity_minereleasenegotiableshare_introduceet:
//解决scrollView中嵌套EditText导致不能上下滑动的问题
arg0.getParent().requestDisallowInterceptTouchEvent(true);
switch (arg1.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_UP:
arg0.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
}
return false;
}
requestDisallowInterceptTouchEvent(true)方法
requestDisallowInterceptTouchEvent(true)方法是用来子View告诉父容器不要拦截我们的事件的,但是这个代码放的位置很重要,可能导致失效。首先我们要知道父类肯定能收到Down事件的,因为这个是事件的起源,系统默认在VIewGroup里把requestDisallowInterceptTouchEvent里把子View对于Down事件的拦截权利剥削了,有了这个Down,它才会决定后面的事件是否传给子类,看父类代码
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
return false;
case MotionEvent.ACTION_MOVE: //表示父类需要
if(true) {
return true;
}
else {
return false;
}
case MotionEvent.ACTION_UP:
return true;
default:
break;
}
// TODO Auto-generated method stub
Log.e("TestView","父容器拦截");
return false; //如果设置拦截,除了down,其他都是父类处理
}
代码可以看出,父类拦截了move和up事件,我们怎么让他失效呢,答案是在接受到down事件的方法里,而不是一开始就设置这个true标志,为什么呢,因为Viewgroup会在收到down事件时重置这个标志,如果太早设置就无效了。