【问题标题】:Horizontal scrollview inside another horizontalscroll view另一个水平滚动视图中的水平滚动视图
【发布时间】:2012-11-14 02:33:08
【问题描述】:

我正在 android 中设计 UI,我在另一个 HorizontalScrollView 中有一个 HorizontalScrollView。但是,孩子HorizontalScrollView 不起作用。

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

【问题讨论】:

  • 我认为这还不可能。我希望你能找到新的解决方案...
  • 检查这个解决方案:stackoverflow.com/a/7174396/779408 它是垂直的。但我认为你可以自定义它。

标签: android horizontalscrollview


【解决方案1】:

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

这是因为 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

【讨论】:

    【解决方案2】:

    像这样覆盖 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);
        }
    }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-03
        • 1970-01-01
        相关资源
        最近更新 更多