为什么switch上下滑动带动scrollview滑动
时间: 2023-07-19 07:19:34 浏览: 97
`Switch` 继承自 `CompoundButton` ,而 `CompoundButton` 内部是有一个 `GestureDetector`,用来处理滑动手势的。当你在 `Switch` 上进行上下滑动操作时,实际上是按照滑动手势的标准进行处理的,这样就会触发 `ScrollView` 的滑动事件,导致 `ScrollView` 被滑动。
为了解决这个问题,可以在 `Switch` 的触摸事件中,通过 `requestDisallowInterceptTouchEvent` 方法告诉父级容器不要拦截 `Switch` 的触摸事件,这样就可以避免 `ScrollView` 被滑动了。
相关问题
如何禁止switch上下滑动带动scrollview滑动
可以在 `Switch` 上设置一个触摸监听器,然后在监听器中处理触摸事件,当用户在 `Switch` 上进行上下滑动操作时,禁止 `ScrollView` 滑动。
你可以像下面这样实现:
```java
switch.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
scrollView.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
scrollView.requestDisallowInterceptTouchEvent(false);
break;
}
return false;
}
});
```
在触摸监听器中,当用户在 `Switch` 上进行上下滑动时,我们调用 `requestDisallowInterceptTouchEvent(true)` 方法告诉 `ScrollView` 不要拦截触摸事件,这样 `ScrollView` 就不会被滑动了。当用户停止在 `Switch` 上滑动时,我们再调用 `requestDisallowInterceptTouchEvent(false)` 方法告诉 `ScrollView` 可以拦截触摸事件了。
switch上下滑动禁止scrollview滑动
可以在`ScrollView`的`onTouch`中判断触摸事件是否在`Switch`内,如果是,则禁止`ScrollView`滑动,否则允许。可以参考以下代码:
```
switch.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
scrollView.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
scrollView.requestDisallowInterceptTouchEvent(false);
break;
}
return false;
}
});
```
其中,`requestDisallowInterceptTouchEvent`方法可以防止父级`ScrollView`拦截子级`Switch`的触摸事件。
阅读全文