ScrollView的滑动冲突并不少见,只要了解触摸事件分发机制就很好办了。
Activity中进行触摸事件监听
参考博客:
完美解决EditText和ScrollView的滚动冲突(上)
完美解决EditText和ScrollView的滚动冲突(下)
这篇博客讲解了在Activity中进行触摸事件判断,如果是在对应的子控件,就不让父控件拦截子控件滑动。
但我的那个页面有6个EditText指定起来就比较费劲了,所以只能采取第二种方法了。
自定义View实现不受父控件拦截
只需要在分发事件中加入
getParent().requestDisallowInterceptTouchEvent(true);
这句话是告诉父view,我的事件自己处理
示例
public class ScrollEditText extends android.support.v7.widget.AppCompatEditText {
public ScrollEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
getParent().requestDisallowInterceptTouchEvent(true);
return super.dispatchTouchEvent(event);
}
}
还有这样的
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
pager.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
pager.requestDisallowInterceptTouchEvent(false);
break;
}
}