解决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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容