Android GridView不完美,如何删除额外的空白区域

时间:2012-05-23 13:37:23

标签: android gridview selector margins

我有一个基于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>

我得到的是这张照片:

enter image description here

5 个答案:

答案 0 :(得分:6)

此空间是由于网格的每一行计算不完善所致。 例如,您的设备宽度为320像素,您有7行,请尝试任何符合320像素的计算。如果每个单元格的宽度是45.71428571428571 px,那么只有它可以减少。

其他选项

申请 的机器人:比重= “中心”  你网格中的属性,以便空格从左到右平分

答案 1 :(得分:3)

在我的情况下,我的水平间距为1dp

android:horizontalSpacing="1dp"

所以要解决这个问题,我只需将正确的填充为-1dp

android:paddingRight="-1dp"

即使我希望在左侧获得一个空间,但它运作正常

答案 2 :(得分:0)

尝试使用

android:layout_margin="0dp"
android:padding="0dp"

您也可以为滚动条分配该空间。
为什么你的垂直和水平间距都是负值?

答案 3 :(得分:0)

我遇到了同样的问题,但在我的情况下,我无法控制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);
}

答案 4 :(得分:0)

grid.setColumnWidth(grid.getColumnWidth()+1);

这将获得当前ColumnWidth并向其添加1个像素。 请记住在onCreateView之后使用它,因为网格需要在此之前初始化。

此外,您的网格视图应使用match_parent(高度和宽度)。列中的图像/布局也应该是match_parent。