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

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

 

下面是布局的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无法使用。 如果有人知道我做错了什么,请告诉我,如果有人需要别的东西也要求它(我不能发布截图)

问题是你正在硬编码你的细胞的宽度和高度。

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

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

我遇到了类似的问题,我使用了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); 

它不是那么优雅,但很容易。 🙂

除了Janusz的评论之外,你可能需要将你的stretchMode设置为none这样Android就不会自动伸展任何事情。 此外,如果您不需要在列之间有任何间距,则将horizontalSpacing设置为0.您可能最终得到此XML:

  

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

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