解决EditText与ScrollView滑动冲突问题

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;  
         }  
    }  

参考 : android 事件处理机制之requestDisallowInterceptTouchEvent

你可能感兴趣的:(解决EditText与ScrollView滑动冲突问题)