我有一个基于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>
我得到的是这张照片:
答案 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。