1

我制作了一个 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

4 回答 4

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);

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

于 2015-02-08T17:23:26.277 回答
4

问题是您正在硬编码单元格的宽度和高度。

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

阅读文档中支持多个屏幕的部分,以更深入地了解这一点。

于 2012-04-26T08:31:02.907 回答
2

除了 Janusz 的评论,您可能需要将您的设置stretchMode为,none以便 Android 不会自动拉伸任何东西。此外,如果您不需要列之间有任何间距,则设置horizontalSpacing为 0。您最终可能会得到以下 XML:

<GridView
        ...
        android:stretchMode="none"
        android:horizontalSpacing="0dp"
</GridView>
于 2012-04-26T08:35:11.533 回答
0

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

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

于 2012-04-26T08:36:03.710 回答