【问题标题】:List image with two columns android具有两列android的列表图像
【发布时间】:2012-03-01 02:44:18
【问题描述】:

谁能帮我创建一个如下图所示的 android 布局。 它有两列来存储图像。 每个图像具有相同的宽度。

非常感谢,

【问题讨论】:

  • 你试过并排放置两个列表视图吗?
  • 他们需要一起滚动吗?
  • @Macarse:是的,他们需要一起滑行。

标签: android android-layout android-ui


【解决方案1】:

最简单的方法是让两个列表视图并排放置,并连接它们的 onScroll() 方法,以便在它们滚动时相互滚动。 (不要忘记使用你正在以编程方式滚动的标志,否则你会得到 StackOverflowError (有点讽刺,是的:) 由于无限递归)。您可以通过滚动图像高度的一半来移动其中一个。

不过,这有点作弊。更好的方法是创建一个从 RelativeLayout 派生的自定义布局,该布局可以存储添加到其中的最后一个和倒数第二个视图的 id。添加下一个时,将其布局为 layout_below="@id/second_to_last",然后新添加的 View 变为最后一个,上一个最后一个 - 倒数第二个,下次您将在其下添加一个视图。 (是的,我知道,不完全是您所说的清晰描述:) 但请随时提出更多问题)

【讨论】:

  • 谢谢你的回答,我现在试试第二种方法。但是如果我想像“endlessList”一样使用它是否可行?
  • @ThànhLê:如果您要拥有无穷无尽的列表,请使用ListView
  • 好吧,那里的无尽没有错。您可以创建一个由两个带有绑定滚动的列表视图组成的组件,也可以自己创建一个类似列表视图的类。取决于您真正要显示的图像数量。如果它是某种无止境的源自网络的画廊(如谷歌图像搜索),并且您想滚动浏览数千个画廊 - 您肯定需要以一种或另一种方式查看回收逻辑。您可能很难为两个列表视图方法整理数据集。
  • 但是话说回来,如果想要一个自定义的类似列表视图的组件,你必须自己实现视图回收,这也不是一件容易的事。 ListView 是一个相当复杂的组件。
  • 另外,如果是两个列表视图方法,以下是您将元素添加到列表视图的方法:stackoverflow.com/questions/4540754/… 您只需在每次添加时在两者之间切换。
【解决方案2】:

快速提示 - 请记住在 xml-layout 文件中为图像添加“android:adjustViewBounds="true"”。没有这个,图像在顶部和底部都有很大的边距。

只是提示,也许您对此有疑问。 还要记住 Android 中的缩放函数

【讨论】:

    【解决方案3】:

    看 pinterest 之类的图片库加载器:https://github.com/etsy/AndroidStaggeredGrid

    【讨论】:

      【解决方案4】:

      您可以创建一个包含两列的 ScrollView(每列一个垂直的 LinearLayout)。要填充它,您只需为每个图像创建一个 ImageView 对象,然后通过调用 linearLayout1.addView(myImageView) 将其添加到列表中。请注意,如果添加大量图像,您可能会遇到内存问题...

      您的布局文件看起来像这样:

      <ScrollView
          android:layout_width="fill_parent"
          android:layout_height="fill_parent" >
      
          <LinearLayout
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:orientation="horizontal" >
      
               <!-- Left column -->
               <LinearLayout
                   android:id="@+id/linearLayout1"
                  android:layout_width="160dp"
                  android:layout_height="fill_parent"
                  android:orientation="verical" />
      
               <!-- Right column -->
               <LinearLayout
                   android:id="@+id/linearLayout2"
                  android:layout_width="160dp"
                  android:layout_height="fill_parent"
                  android:orientation="verical" />
          </LinearLayout>
      </ScrollView>
      

      【讨论】:

      • 这不好。 ListView 仅为当前可见的项目加载布局。此布局将保存所有加载的项目。它会运行得更慢并使用更多的内存。
      • 是的,我知道。这就是为什么我写了“请注意,如果添加大量图像,您可能会遇到内存问题......”。但问题并未指定视图应包含多少图像。如果几乎所有内容都适合屏幕,则内存使用量将与 ListView 大致相同。不管怎样,再指出来也无妨。
      猜你喜欢
      • 1970-01-01
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      相关资源
      最近更新 更多