我创建了一个包含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无法使用。如果有人知道我做错了什么,请告诉我,如果有人需要别的东西也要求它(我不能发布截图)
答案 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"
。