1

我在 android 中设计 UI,我HorizontalScrollView在另一个HorizontalScrollView. 然而,孩子HorizontalScrollView不工作。

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

4

3 回答 3

2

让一个东西在另一个东西里面滚动通常是个坏主意。谷歌不推荐它。

这是因为 android 处理滚动事件的方式。有一个方法被调用dispatchTouchEvent()onInterceptTouchEvent()它决定是拦截触摸事件还是将其传递给它的孩子。对于可滚动视图,它们将始终拦截“滑动”动作。所以它永远不会给你的孩子。

有解决方法,但它们很混乱,并且大部分时间都不起作用。你最好调整你的 UI 以避免这种情况。

如果您坚持尝试,以下是这些线程中讨论的一些潜在解决方法:

ScrollView 中的 ListView 潜在解决方法

ScrollView 中的 ListView 在 Android 上不滚动

Android:带有自定义列表视图的可滚动首选项窗口

于 2012-10-30T06:47:27.663 回答
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);
    }
}
于 2012-10-30T06:46:28.353 回答
0

所以我在horisontalScrollView里面的LinearLayout里面使用了ScrollView。主要问题是在检测到 Y swype 时在 Horizo​​ntalScrollView 中实现 OnInterceptTouchEvent 以在子 ScrollView 中传递 TouchEvent。而且效果很好,看起来很有趣。是的,您不应该将 Scrollview 或 listView 直接放在另一个 Scrollview 中,但您可以将 Linearlayout 放在 ScrollView 中,而不是放在其他 Scrollable 对象上。

于 2012-11-13T18:33:08.617 回答