动态更改android gridview中的列号?

时间:2013-09-17 13:05:08

标签: android gridview

我的应用程序以横向显示gridview中的图像图标。为此我使用xml作为

<GridView
    android:id="@+id/gridview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:numColumns="4"
    android:columnWidth="100px"
    android:stretchMode="columnWidth"
    android:gravity="center"/>

对于纵向方向,我想在gridview列中只显示两个图像图标。怎么做?

2 个答案:

答案 0 :(得分:18)

使用自适应资源:请确保在资源文件夹/res中包含以下文件夹:values-landvalues-port。在这两个文件夹中添加一个资源文件,我们称之为integers.xml。

/values-land/integers.xml 中,您将至少拥有:

<resources>
    <item name="grid_rows" type="integer">4</item>
</resources>

values-port / integers.xml

<resources>
    <item name="grid_rows" type="integer">3</item>
</resources>

布局更改为:

<GridView
    android:id="@+id/gridview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:columnWidth="100px"
    android:gravity="center"
    android:numColumns="@integer/grid_rows"
    android:stretchMode="columnWidth" />

请注意 @ integer / grid_rows

的存在

答案 1 :(得分:2)

我遇到了这个问题,而gunar的回答非常有帮助,但我想我可以添加更多细节。如果在AndroidStudio中,将目录视图设置为“Project”(这样您就可以看到新目录)并右键单击“res”以创建新的资源目录。将两个新目录“values-port”和“values-land”分别作为类型值。

然后,在values-land中,添加一个整数项:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="columns">4</integer>
</resources>

并在values-port中添加一个整数项:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="columns">2</integer>
</resources>

现在在gridview布局中,而不是硬编码numColumn:

<GridView
       android:id="@+id/gridview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:numColumns="@integer/columns"
        android:columnWidth="100px"
        android:stretchMode="columnWidth"
        android:gravity="center"/> 

这基本上就是枪械的解决方案(谢谢枪手!)但它增加了我在此过程中发现的一些细节。例如,在我更改为Project视图并且已经存在整数资源类型之前,我无法看到我正在创建的res目录,因此我们不需要将列声明为item,然后将type设置为integer。 (顺便说一句:我喜欢Android XML工具!)