另一个horizo​​ntalscroll视图内的水平scrollview

时间:2012-10-30 06:27:05

标签: android horizontalscrollview

我在android中设计UI,其中HorizontalScrollView位于另一个HorizontalScrollView内。但是,孩子HorizontalScrollView不起作用。

每当在孩子HorizontalScrollView中制作手势时,是否可以禁用父HorizontalScrollView。我知道这听起来很棘手但我需要在我的UI中实现它。

3 个答案:

答案 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。 主要问题是在Horizo​​ntalScrollView中实现OnInterceptTouchEvent 在检测到Y swype时,在子项ScrollView中传递TouchEvent。它运作良好,看起来很有趣。是的,您不应该直接将Scrollview或listView放在另一个Scrollview中,但是您可以将Linearlayout放在ScrollView中,而不是将其他Scrollable对象放在其上。