Android在switch范围中上下滑动会带动scrollview滑动
时间: 2023-08-04 18:09:25 浏览: 108
这是因为在switch的处理逻辑中,可能会触发scrollview的滑动事件。可以尝试在switch的处理逻辑中禁止scrollview的滑动事件,或者在scrollview中设置一个属性来禁止它与switch的滑动事件互动。具体实现可以参考以下代码:
```
switch.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
scrollView.requestDisallowInterceptTouchEvent(true);
return false;
}
});
scrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//禁止scrollview的滑动事件
return true;
}
});
```
相关问题
为什么switch上下滑动带动scrollview滑动
`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` 可以拦截触摸事件了。
阅读全文