【问题标题】:How can I make horizontally scrollable items in a vertical listview?如何在垂直列表视图中制作水平滚动项目?
【发布时间】:2011-01-31 14:17:38
【问题描述】:

我想在垂直滚动的 Listview 中使用水平滚动项。

我对此的天真看法是将列表视图项的内容放在滚动视图中。这些项目在水平方向上比滚动视图更宽,但不高于滚动视图。由于列表视图是一个普通的垂直滚动列表视图,我认为垂直拖动会在列表中滚动,而水平拖动会在项目中滚动。

然而这并没有奏效。列表垂直滚动并正确显示项目,但水平滚动不起作用(没有任何反应)。不幸的是,我真的不确定从这里去哪里。

请注意,项目应独立于其他项目水平滚动,即横向拖动时整个列表不应横向滚动。

作为参考,我希望该列表的行为类似于它在应用“Pulse”中的行为,以防您看到它。

【问题讨论】:

    标签: android listview scrollview


    【解决方案1】:

    用你喜欢的任何adapter 制作普通的ListView,但设计项目布局如下:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    
        <HorizontalScrollView
            android:id="@+id/hor_scroll"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
    
            <LinearLayout
                android:id="@+id/lin"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
                <ImageView
                    android:id="@+id/icon"
                    android:layout_width="wrap_content"
                    android:layout_height="fill_parent"
                    android:layout_marginRight="6.0dip"
                    android:layout_alignParentTop="true"
                    android:layout_alignParentBottom="true"
                    android:focusable="false" />
    
                <TextView
                    android:textAppearance="?android:textAppearanceMedium"
                    android:gravity="center_vertical"
                    android:id="@+id/text"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:singleLine="true"
                    android:layout_toRightOf="@id/icon"
                    android:layout_alignParentTop="true"
                    android:layout_alignParentBottom="true" />
    
            </LinearLayout>
    
        </HorizontalScrollView>
    
    
    </RelativeLayout>
    

    您将拥有 Vertically Scrollable ListView 和 Horizo​​ntally Scrollable 项目。并且这些项目独立于其他项目滚动。

    【讨论】:

      【解决方案2】:

      您需要使用HorizontalScrollViewDroidstack 是一个开源应用程序(我写的),它就是这样做的(在问题列表中,你可以滚动每个问题的标签),如果你想要一个具体的例子。

      【讨论】:

      • 这样做,您将失去 ListView 项目单击功能。也就是说,对可滚动内容的点击不会转发到Listview。
      【解决方案3】:

      如果你遵循 android 开发的良好实践,你不应该将 ScrollView 放在 ListView 中,不推荐 Romain Guy 和其他 android 开发人员阅读此处阅读的论点:Android ScrollView layout problem

      来自安卓文档:

      “你永远不应该将 Horizo​​ntalScrollView 与 ListView 一起使用,因为 ListView 负责自己的滚动。最重要的是,这样做会破坏 ListView 中处理大型列表的所有重要优化,因为它有效地强制ListView 显示其整个项目列表以填充由 Horizo​​ntalScrollView 提供的无限容器。"

      编辑:上面发布的警告似乎是来自 android 文档的错误,与一些同事交谈,他们告诉我这是可能的。文档中的问题在这里,http://code.google.com/p/android/issues/detail?id=2781

      我的道歉

      【讨论】:

      • 好的,但是有什么替代方案呢?
      • 我与一些同事交谈并告诉我 Android 文档中的一个问题,我编辑了我的帖子,应用程序
      • 我认为这句话试图说明您不应该将ListView 放在ScrollView 中,而不是相反,这应该没问题。
      【解决方案4】:

      您可以使用“ViewPager”列表中的每个元素都可以是一个 ViewPager

      【讨论】:

        猜你喜欢
        • 2012-07-31
        • 1970-01-01
        • 2018-11-24
        • 2015-12-21
        • 2015-08-04
        • 2019-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多