Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GridView:如何从我的GirdView对象中去掉额外的空间?_Java_Android - Fatal编程技术网

Java GridView:如何从我的GirdView对象中去掉额外的空间?

Java GridView:如何从我的GirdView对象中去掉额外的空间?,java,android,Java,Android,我正在为Android手机编写一个应用程序,用于在互联网上进行人机对弈。我在看一些教程,学习如何开发Android应用程序,发现了一个制作图库的很好的例子(这是一个制作狗图库的GridView使用示例),于是我想到了使用GridView绘制棋盘,因为示例项目也处理点击事件,我打算以相同的方式使用相同的事件,但目的不同。游戏运行得很好(目前是hotseat版本),但是,每当我旋转手机屏幕时,我的GridView就会变得歇斯底里,并在我的象棋桌上的立柱之间留出一些空白,这让我非常沮丧。我意识到这是因

我正在为Android手机编写一个应用程序,用于在互联网上进行人机对弈。我在看一些教程,学习如何开发Android应用程序,发现了一个制作图库的很好的例子(这是一个制作狗图库的GridView使用示例),于是我想到了使用GridView绘制棋盘,因为示例项目也处理点击事件,我打算以相同的方式使用相同的事件,但目的不同。游戏运行得很好(目前是hotseat版本),但是,每当我旋转手机屏幕时,我的GridView就会变得歇斯底里,并在我的象棋桌上的立柱之间留出一些空白,这让我非常沮丧。我意识到这是因为GridView的宽度与其父视图的宽度相同,并且GridView试图用填充填充其父视图,但是应该(并且可能是)有一个简单的解决方案来解决这个问题。然而,经过一整天的研究,我还没有找到任何线索来帮助我画一张完美的棋盘,而不会对功能产生负面影响。 如果手机处于纵向模式,国际象棋桌看起来不错,但在横向模式下就不太好了。 这就是我如何决定我们是处于纵向模式还是横向模式:

((((MainActivity)mContext).getWindow().getWindowManager().getDefaultDisplay().getWidth()) < ((MainActivity)mContext).getWindow().getWindowManager().getDefaultDisplay().getHeight())
(((MainActivity)mContext.getWindow().getWindowManager().getDefaultDisplay().getWidth())<((MainActivity)mContext.getWindow().getWindowManager().getDefaultDisplay().getHeight())
在main.xml文件中,GridView的定义方式如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              >
    <GridView xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/gridview"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:numColumns="8"
              android:verticalSpacing="0dp"
              android:horizontalSpacing="0dp"
              android:stretchMode="columnWidth"
              android:gravity="center"
              >
    </GridView>
...
</LinearLayout>

...
我感谢您对这个问题的帮助,感谢您阅读本文

肖像:


景观:

网格视图可能不是您想要的。GridView和ListView一样,用于高效地显示滚动的、无边界的数据集。棋盘两者都不是。相反,您可能希望以编程方式填充

您的GridLayout似乎不尊重android:layout\u width=“wrap\u content”的原因是,由于GridView用于显示无限数据,其中每个项目可以有不同的大小,因此它不相信项目具有可以合理测量的统一宽度。(如果适配器有10000个项目,GridView是否应该测量所有项目以确定正确的列宽?)


如果您打算继续使用GridView(您不应该这样做),请尝试为
android:layout\u width
设置一个显式值,而不是
wrap\u content
。这将阻止GridView展开以填充可用空间。您还可以使用所述的资源系统为不同的屏幕方向使用备用布局。或者,您可以在清单中的活动标签上使用android:screenOrientation=“纵向”禁用横向模式

使用GridView对象的setPadding方法可以简单地解决这个问题。

我要感谢您的深入回答,它帮助我找到了正确的答案。我和Lajos有同样的问题,但padding没有帮助我。。。甚至我也有同样的问题在这里描述,但填充并没有帮助我。。所以,任何人都请给我建议解决这个问题的方法。万一你读到这篇文章,你说你找到了一个解决方法。你介意分享吗?Lajos,你能分享你的解决方案吗?