Switch滑动事件会传递给NestedScrollView
时间: 2024-02-01 17:03:09 浏览: 174
如果Switch的父布局设置了`android:descendantFocusability="blocksDescendants"`,那么Switch就不会拦截子视图的滑动事件,也就是说,Switch的滑动事件会传递给NestedScrollView。
为了避免这种情况,你可以在Switch的父布局中加入如下代码:
```xml
android:focusable="true"
android:focusableInTouchMode="true"
```
这样设置后,Switch和其父布局都可以接收焦点,从而避免了Switch的滑动事件被传递给NestedScrollView。
相关问题
Switch点击事件会传递给NestedScrollView
Switch的点击事件不会传递给NestedScrollView,因为点击事件是不会被拦截的。点击事件会由被点击的控件先处理,如果该控件没有消耗该事件,那么该事件会一直向上传递,直到被消耗为止。
在这种情况下,如果你想要在点击Switch时不让NestedScrollView滑动,可以在Switch的父布局中加入如下代码:
```xml
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
```
这样设置后,Switch和其父布局都可以接收点击事件,并且点击Switch时不会让NestedScrollView滑动。
按住SWITCH会滑动NestedScrollView
当你按住Switch并向上或向下滑动时,NestedScrollView会滑动,这是因为Switch默认拥有滑动手势,当你按住Switch并滑动时,Switch会拦截滑动事件,从而导致NestedScrollView无法接收滑动事件。
要解决这个问题,你可以在Switch的父布局中加入如下代码:
```xml
android:descendantFocusability="blocksDescendants"
```
这样设置后,Switch将不再接收子视图的焦点,也就不会再拦截子视图的滑动事件,从而使NestedScrollView可以正常接收滑动事件。
此外,你还可以通过在Switch的父布局中设置`android:focusable="true"`和`android:focusableInTouchMode="true"`来确保Switch不会拦截焦点事件和触摸事件。
阅读全文