我在 android 中设计 UI,我HorizontalScrollView
在另一个HorizontalScrollView
. 然而,孩子HorizontalScrollView
不工作。
HorizontalScrollView
每当在 child 中做出手势时,是否可以禁用父级HorizontalScrollView
。我知道这听起来很棘手,但我需要在我的 UI 中实现它。
我在 android 中设计 UI,我HorizontalScrollView
在另一个HorizontalScrollView
. 然而,孩子HorizontalScrollView
不工作。
HorizontalScrollView
每当在 child 中做出手势时,是否可以禁用父级HorizontalScrollView
。我知道这听起来很棘手,但我需要在我的 UI 中实现它。
让一个东西在另一个东西里面滚动通常是个坏主意。谷歌不推荐它。
这是因为 android 处理滚动事件的方式。有一个方法被调用dispatchTouchEvent()
,onInterceptTouchEvent()
它决定是拦截触摸事件还是将其传递给它的孩子。对于可滚动视图,它们将始终拦截“滑动”动作。所以它永远不会给你的孩子。
有解决方法,但它们很混乱,并且大部分时间都不起作用。你最好调整你的 UI 以避免这种情况。
如果您坚持尝试,以下是这些线程中讨论的一些潜在解决方法:
像这样覆盖 onInterceptTouchEvent 怎么样:
public class EmbeddedHorizontalScrollView extends HorizontalScrollView {
public EmbeddedHorizontalScrollView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
// tell parent and it's ancestors to skip touch events
this.getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
this.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
return super.onInterceptTouchEvent(ev);
}
}
所以我在horisontalScrollView里面的LinearLayout里面使用了ScrollView。主要问题是在检测到 Y swype 时在 HorizontalScrollView 中实现 OnInterceptTouchEvent 以在子 ScrollView 中传递 TouchEvent。而且效果很好,看起来很有趣。是的,您不应该将 Scrollview 或 listView 直接放在另一个 Scrollview 中,但您可以将 Linearlayout 放在 ScrollView 中,而不是放在其他 Scrollable 对象上。