我在android中设计UI,其中HorizontalScrollView
位于另一个HorizontalScrollView
内。但是,孩子HorizontalScrollView
不起作用。
每当在孩子HorizontalScrollView
中制作手势时,是否可以禁用父HorizontalScrollView
。我知道这听起来很棘手但我需要在我的UI中实现它。
答案 0 :(得分:2)
有一个东西滚动到另一个滚动的东西通常是一个坏主意。谷歌不推荐它。
这是因为android处理滚动事件的方式。有一个名为dispatchTouchEvent()
和onInterceptTouchEvent()
的方法决定是拦截触摸事件还是将其传递给它的孩子。对于可滚动视图,它们将始终拦截“滑动”移动。所以它永远不会送给你的孩子。
有这方面的解决方法,但它们很混乱,大部分时间都不会工作。最好调整UI,以避免出现这种情况。
如果你坚持尝试,这些线程中讨论了一些潜在的解决方法:
ListView in ScrollView potential workaround
ListView inside ScrollView is not scrolling on Android
Android: Scrollable preferences window with custom list view
答案 1 :(得分:0)
如何覆盖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);
}
}
答案 2 :(得分:0)
所以我在horisontalScrollView里面的LinearLayout里面使用了ScrollView。 主要问题是在HorizontalScrollView中实现OnInterceptTouchEvent 在检测到Y swype时,在子项ScrollView中传递TouchEvent。它运作良好,看起来很有趣。是的,您不应该直接将Scrollview或listView放在另一个Scrollview中,但是您可以将Linearlayout放在ScrollView中,而不是将其他Scrollable对象放在其上。