Android GridView不完善,如何删除右侧多余的空白

Android GridView不完善,如何删除右侧多余的空白,android,gridview,selector,margins,Android,Gridview,Selector,Margins,我有一个基于GridView的日历。我有下面的XML布局,选择器设置为null,因此根据我从这个站点得到的建议,android:listSelector=“@null”。现在我在GridView的右边得到了几个像素宽的条带。为什么?我已经尽了我所能,但是没有用。以下是我的XML布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:lay

我有一个基于GridView的日历。我有下面的XML布局,选择器设置为null,因此根据我从这个站点得到的建议,android:listSelector=“@null”。现在我在GridView的右边得到了几个像素宽的条带。为什么?我已经尽了我所能,但是没有用。以下是我的XML布局:

        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >

            <GridView
                android:id="@+id/calendar"
                android:layout_width="fill_parent"
                android:layout_height="match_parent"
                android:horizontalSpacing="-1px"
                android:numColumns="7"
                android:stretchMode="columnWidth" 
                android:gravity="center"
                android:verticalSpacing="-1px"
                android:listSelector="@null" >

            </GridView>

        </LinearLayout>

我得到的是这张照片:

尝试使用

android:layout_margin="0dp"
android:padding="0dp"
您还可以为滚动条分配该空间

为什么垂直和水平间距都是负值?

这个间距是由于网格中每一行的计算不完善造成的。 例如,您的设备宽度为320像素,有7行,请尝试满足320像素的任何计算。如果每个单元的宽度为45.71428571428571 px,则只能减小

其他选择

申请 android:gravity=“center”
属性,这样空间将从左到右平均分配

我也遇到了同样的问题,但在我的例子中,我无法控制
GridView
实例,因此无法读取列宽。然而,我可以将其容器分为子类。
这不是很正统,但是您可以覆盖onMeasure方法并添加一些像素
类似这样的内容:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    final int RIGHT_MARGIN_OVERSIZE_DIP = 6;
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    int width = this.getMeasuredWidth()
    int overSize = (int)((getResources().getDisplayMetrics().density*RIGHT_MARGIN_OVERSIZE_DIP) + 0.5f);
    widthMeasureSpec = MeasureSpec.makeMeasureSpec(width + overSize, MeasureSpec.getMode(widthMeasureSpec));        
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

在我的例子中,水平间距为1dp

android:horizontalSpacing="1dp"
所以为了解决这个问题,我把正确的填充设置为-1dp

android:paddingRight="-1dp"
尽管我希望在左边有一个空间,但它工作正常

grid.setColumnWidth(grid.getColumnWidth()+1);
这将获得当前列宽度,并向其中添加1个像素。 记住在onCreateView之后使用它,因为网格需要在此之前初始化


此外,网格视图应使用匹配父视图(高度和宽度)。列中的图像/布局也应为匹配父视图。

这可能是滚动条问题?尝试将滚动条可见性设置为false。是否尝试将水平间距从-1更改为0?@Demonick,我尝试了滚动条问题,但没有成功。请参见下面的dinesh sharma的回答,这似乎是有道理的。您可以尝试在主布局中使用一个布局,并将gridView置于该布局中,并在此布局中使用android:gravity=“center\u horizontal”属性,这可能会帮助您和另外一件事将gridView的布局宽度更改为“wrap\u content”耶,你说得对@dinesh sharma。在横向模式下,间隙几乎消失,证明问题与屏幕尺寸有关。不过,我还没有安卓:gravity=“center”功能。然而,这看起来相当微不足道。谢谢我尝试了
android:gravity=“center”
android:layout\u gravity=“center”
解决方案,但都不起作用。我有一个折衷的解决方案,就是在代码中指定列宽,使它们的组合宽度大于偏差的屏幕宽度。这会迫使列填充屏幕,但最后一列会被略微剪裁-如果有边框,则效果不太好,因为边框会消失。with是这样指定的:[link](字节胶囊)我有horizontalSpacing=“0dp”,这个解决方案对我还是有帮助的。空的空格不见了。@Rempelos如果我没记错的话,paddingRight中的数字应该是-horizontalspacking,所以如果你的horizontalspacking是2dp,那么你的paddingRight应该是-horizontalspacking-2@JiMMaR其实你是对的。我把这个例子和我的例子搞混了,我有
horizontalspacting=“0dp”
,但额外的空间仍然出现在右边,但只添加了
paddingRight=“-1dp”
就解决了这个问题。