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"
。