适合屏幕的GridView中的常量列数

时间:2013-08-05 17:09:40

标签: android gridview

我希望在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"
    />

我添加了两张图片以显示我想要的内容

Grid view in a 4 inches mobile

Grid view in a 7 inches tablet

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

4 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

答案 1 :(得分:0)

您是否尝试将GridView的项目布局中的ImageView的layout_width设置为match_parent?

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这是我刚刚测试的内容:

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