GridView.LayoutParams在不同的屏幕尺寸中是相同的,是否可能?

时间:2012-04-26 08:23:18

标签: java android image gridview layoutparams

我创建了一个包含6列和60行的网格视图。我可以在哪里添加,移动和删除图像。但是我很难设置列之间的距离(我不希望列之间有任何空格)。因为它会改变屏幕尺寸的变化。我为我的手机设置了它,然后在朋友的手机上尝试了它,并且在列之间有10dp。下面是GridView 编辑的xml:如果我在较小的手机中尝试将图像放大到适合单元格的位置。

<GridView
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/image_grid_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:numColumns="@integer/num_columns"
            android:stretchMode="columnWidth" />

继承布局的java代码

ImageCell v = null;
if (convertView == null) {
    v = new ImageCell (mContext);
    v.setLayoutParams(new GridView.LayoutParams(80, 80));
    v.setScaleType(ImageView.ScaleType.CENTER_CROP );

} else {
    v = (ImageCell) convertView;
}

我尝试将v.setLayoutParams改为

v.setLayoutParams(new GridView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT ));

v.setLayoutParams(new GridView.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

但是那两个让GridView无法使用。如果有人知道我做错了什么,请告诉我,如果有人需要别的东西也要求它(我不能发布截图)

4 个答案:

答案 0 :(得分:6)

我遇到了类似的问题,我使用了getDisplayMetrics的另一种方法。

DisplayMetrics metrics = this.getResources().getDisplayMetrics();
int screenWidth = metrics.widthPixels;

并在列数之间划分。

v.setLayoutParams(new GridView.LayoutParams(screenWidth/2, screenWidth/2));
v.setPadding(8, 8, 8, 8);

它不那么优雅,但它很容易。 : - )

答案 1 :(得分:4)

问题在于您正在对单元格的宽度和高度进行硬编码。

这使得所有手机上的单元格宽度为80像素。如果手机具有更高的分辨率(实际像素变小),您的视图将会更小。如果你真的想用Java而不是xml创建整个视图,至少从ressource文件加载你的单元格的dimension。这将使您能够将值保存在与密度无关的像素中,并让手机将值调整为与实际屏幕分辨率匹配的值。

阅读文档中的supporting multiple screens部分,以便更深入地了解这一点。

答案 2 :(得分:2)

除了Janusz的评论之外,您可能需要将stretchMode设置为none,以便Android不会自动延长任何内容。此外,如果列之间不需要任何间距,则将horizontalSpacing设置为0.您最终可能会使用此XML:

<GridView
        ...
        android:stretchMode="none"
        android:horizontalSpacing="0dp"
</GridView>

答案 3 :(得分:0)

请参阅 http://developer.android.com/guide/practices/screens_support.html

如果您的图形在小型手机上太大,请使用其他可绘制目录,如drawable-mdpi或sth。 您也应该在gridview(xml)中尝试android:stretchMode="none"