如何摆脱gridview中的空格

时间:2011-11-13 00:11:37

标签: android android-gridview

这件事现在已经开了我一段时间了,我似乎无法解决它。

我有一个网格视图,其中显示了一些位图。当我通过适配器填充我的图像视图时,我在所有图像边添加了一个5dp的填充(iv.setPadding(5,5,5,5);),但不知何故,每个顶部和底部都添加了更多的空间我的gridview上的项目。

我知道这已经是asked一个few times here,其中一些甚至已经接受了答案,但是,当我尝试起诉上面网址中描述的答案时,我仍然在顶部和底部保持相同的额外空间。

现在有没有其他方法可以做到这一点?

以下是我的一些代码:

main.xml中

<?xml version="1.0" encoding="utf-8"?>
<GridView
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/imageGrid"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:numColumns="6"
    />

grid_item.xml

<?xml version="1.0" encoding="utf-8"?>
<ImageView 
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/grid_item_image"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content" />

我尝试将以下内容添加到main.xml

中的listselector属性中
  • @null
  • @绘制/ solid_white
  • @android:ID /空

以下是顶部和底部多余空格的样子(侧面的那些是我正在添加的如上所述):

enter image description here

关于如何删除这些血腥空间的任何其他想法,以便我的网格视图具有相同的间距?

提前致谢,

4 个答案:

答案 0 :(得分:24)

对我来说,它通过在我的Adapter类中设置imageview.setAdjustViewBounds(true);来解决问题。

似乎我的方形图像在宽度上自动调整大小,但Gridview仍然使用原始高度。通过调整边界,即使默认拉伸模式已启用,两个尺寸也会自动调整大小并且所有项目都会平滑显示。

答案 1 :(得分:8)

如果没有另外设置,GridView将通过以各种方式拉伸事物来覆盖您想象它应该产生的布局。如果要通过定义网格项的列宽和大小来完全控制布局,则必须确保将GridView的 stretchMode 属性设置为“none”< /强>

<GridView
        ...
        android:stretchMode="none">
</GridView>

此外,您使用GridView宽度填充父级。我认为你应该包装宽度的内容,除非你想要额外的填充。你在哪里添加5dp填充?围绕每个位图或在gridview的边缘?我没有看到它。

你可能应该填补高度。 (在下面的一些宽度和高度可能会被“wrap_content”替换)

所以,对你来说

<?xml version="1.0" encoding="utf-8"?>
<GridView
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/imageGrid"
    android:stretchMode="none"        
    android:layout_width="XXXdp"
    android:layout_height="fill_content"
    android:numColumns="6"
    />

另外,不确定是否需要列间距和宽度,这可能是(或dp而不是wrap_content) - 您可能不需要在GridView中使用这些 - 我不确定:

    android:columnWidth="YYYdp"
    android:horizontalSpacing="0dp"

带有5dp填充的ImageViews:

<?xml version="1.0" encoding="utf-8"?>
<ImageView 
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/grid_item_image"
   android:padding="5dp"
   android:layout_width="UUUdp"
   android:layout_height="VVVdp" />

答案 2 :(得分:1)

我找到了一种简单的方法来绕过它。只需在android:layout_marginRight中添加GridView

答案 3 :(得分:-1)

第1步:

android:stretchMode="none"
android:numColumns="auto_fit"
android:gravity="center"

第2步: 在onMeasure中返回您计算的宽度和高度