【问题标题】:Constant number of columns in GridView fitting the screenGridView 中的恒定列数适合屏幕
【发布时间】:2013-08-06 11:47:20
【问题描述】:

我想在GridView 中显示一些图像缩略图(图像是方形的),这些约束是每行只显示两个图像并且图像适合屏幕宽度(填充和边距除外)但具有最大宽度和高度(例如 1 英寸)
我已阅读问题,但无法解决问题。你能帮帮我吗?

GridView xml:

<GridView
    android:id="@+id/gridview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:horizontalSpacing="10dp"
    android:numColumns="2"
    android:scrollbarStyle="outsideOverlay"
    android:scrollbars="vertical"
    android:stretchMode="columnWidth"
    android:verticalScrollbarPosition="right"
    android:verticalSpacing="10dp"
    android:padding="10dp" />

GridView 项目 xml:

<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/thumbnail"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scaleType="fitXY"
    android:maxWidth="72pt"
    android:maxHeight="72pt"
    />

我添加了两张图片来显示我到底想要什么

第一张图片(4 英寸手机)正是我想要的,但随着屏幕宽度的增长(平板电脑或横向),如图像 2,我想放大图像项目。 (请注意,有一个最大宽度大小,因此此模式下的结果与图 1 中的手机不同)

【问题讨论】:

  • @aliezra 你的这个问题解决了吗?
  • @JohnR 正如 Android 开发人员所说,您必须自己计算视图和间距大小。

标签: android gridview


【解决方案1】:

您必须自己计算所需的水平间距。

由于结果以像素为单位,并且您可能希望处理实际尺寸(如英寸或 DP),因此您首先需要将约束转换为像素。例如,要将 DP 转换为像素,请使用:

float px = someDpValue * context.getResources().getDisplayMetrics().density;

然后,您可以使用this method 获取gridView 的大小,然后您就可以进行计算并相应地设置gridView 及其适配器。

您可能需要设置每列的水平间距和高度。

请注意,如果网格内的 imageViews 将使用非方形图像,它们将保持其纵横比,因此您也必须处理它。您可以使用 center-crop 作为缩放类型,或者只是拉伸图像。

【讨论】:

  • 非常感谢。我已经改进了我的问题,因为我认为它不够清楚。假设我的 GridView 大小以像素为单位,我该如何实现我在问题中描绘的这两种状态?
  • 您是否还假设输入图像的分辨率(宽度,高度)?对于测量单位,您可以使用英寸(例如,使用“1.5in”)。另外,我不确定现在是什么问题。你只需要根据你已经决定的约束来计算你需要的尺寸。
【解决方案2】:

你有没有尝试将GridView的item布局中ImageView的layout_width设置为match_parent?

【讨论】:

  • 您应该在主要问题下方的 cmets 中提出此类问题。
  • 需要 50 声望才能做到这一点,抱歉
【解决方案3】:

您需要扩展 imageview 以创建高度始终与宽度匹配的 imageview。 然后使用这个视图而不是股票图像视图并将布局宽度和高度设置为 match_parent。并移除 maxWidth 和 maxHeight。

【讨论】:

    【解决方案4】:

    这是我刚刚测试过的:

    因为您在 xml 中添加了 GridView,所以在您设置适配器时它已被绘制,因此调用了 onMeasure。就此而言,您可以使用GridView.getWidth() 获取gridView 的宽度(实际值)并将其传递给适配器的实例。然后您可以使用它来设置项目的宽度和高度(在getView() 方法中),当然您必须手动计算边距,但是如果在项目的布局 xml 中定义填充,则可以完美地工作

    【讨论】:

      猜你喜欢
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 2014-06-02
      相关资源
      最近更新 更多