Switch与NestedScrollView冲突
时间: 2023-09-13 13:04:32 浏览: 48
Switch和NestedScrollView的冲突可能是由于它们都拥有滑动手势,导致在滑动Switch时会误触到NestedScrollView的滑动事件,或者在滑动NestedScrollView时会误触到Switch的滑动事件,从而导致界面行为异常。
解决这个问题的方法是在Switch的父布局中加入如下代码:
```xml
android:descendantFocusability="blocksDescendants"
```
这样设置后,Switch将不再接收子视图的焦点,也就不会再拦截子视图的滑动事件,从而避免了与NestedScrollView的冲突。
相关问题
按住SWITCH不要滑动NestedScrollView
如果你不希望在按住Switch时滑动NestedScrollView,可以使用以下方法:
1. 在Switch的父布局中加入如下代码:
```xml
android:descendantFocusability="blocksDescendants"
```
这样设置后,Switch将不再接收子视图的焦点,也就不会再拦截子视图的滑动事件,从而避免了与NestedScrollView的冲突。
2. 在Switch上添加一个触摸事件监听器,当用户按下Switch时,禁止NestedScrollView滑动。具体代码如下:
```java
switchView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
nestedScrollView.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
nestedScrollView.requestDisallowInterceptTouchEvent(false);
break;
}
return false;
}
});
```
上述代码中,当用户按下Switch时,我们通过`nestedScrollView.requestDisallowInterceptTouchEvent(true)`方法禁止NestedScrollView拦截触摸事件,从而使用户在按住Switch时无法滑动NestedScrollView。
当用户松开Switch时,我们通过`nestedScrollView.requestDisallowInterceptTouchEvent(false)`方法允许NestedScrollView拦截触摸事件,从而恢复NestedScrollView的滑动行为。
按住SWITCH会滑动NestedScrollView
当你按住Switch并向上或向下滑动时,NestedScrollView会滑动,这是因为Switch默认拥有滑动手势,当你按住Switch并滑动时,Switch会拦截滑动事件,从而导致NestedScrollView无法接收滑动事件。
要解决这个问题,你可以在Switch的父布局中加入如下代码:
```xml
android:descendantFocusability="blocksDescendants"
```
这样设置后,Switch将不再接收子视图的焦点,也就不会再拦截子视图的滑动事件,从而使NestedScrollView可以正常接收滑动事件。
此外,你还可以通过在Switch的父布局中设置`android:focusable="true"`和`android:focusableInTouchMode="true"`来确保Switch不会拦截焦点事件和触摸事件。