GridView:如何从GridView对象中删除额外的空间?

时间:2010-06-02 00:53:56

标签: java android

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

((((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>

感谢您对此问题的任何帮助,并感谢您阅读本文。

肖像:http://www.freeimagehosting.net/image.php?f388b3ec64.png

风景:http://www.freeimagehosting.net/image.php?ee790603a2.png

2 个答案:

答案 0 :(得分:4)

GridView可能不是你想要的。与ListView一样,GridView用于有效地呈现滚动,无界数据集。国际象棋棋盘都不是。以编程方式填充TableLayout可能是你想要的。

您的GridLayout似乎不尊重android:layout_width="wrap_content"的原因是,由于GridView用于显示无限数据,其中每个项目可以具有不同的大小,因此它不相信项目的宽度均匀可以合理地衡量。 (如果适配器有10,000个项目,GridView是否应该测量所有项目以确定正确的列宽?)

如果您打算继续使用GridView(不应该这样做),请尝试为android:layout_width而不是wrap_content设置显式值。这将阻止GridView扩展以填充可用空间。您还可以使用所述资源系统here使用备用布局用于不同的屏幕方向。或者,您可以使用清单中活动代码的android:screenOrientation="portrait"停用横向模式。 ;)

答案 1 :(得分:2)

使用GridView对象的setPadding方法可以解决问题。