在安卓GridView中动态更改列数?

9

我的应用程序在横屏方向下在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个回答

19

通过使用自适应资源:确保在资源文件夹/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 的存在。

我必须使用确切的名称integers.xml(注意s,而@integer/没有)。我不熟悉Android开发,这可能是一种惯例。 - user276648

2
我遇到了这个问题,gunar的答案很有用,但我认为我可以添加更多细节。如果在Android Studio中,将目录视图设置为“项目”(这样您就可以看到新目录),然后右键单击“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>

现在,在您的网格视图布局中,不要硬编码您的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"/> 

这本质上是gunar的解决方案(感谢gunar!),但是我在过程中发现了一些细节。例如,直到我切换到项目视图才能看到我正在创建的res目录,还有已经有一个整数资源类型,因此我们不需要将列声明为item,然后将类型设置为integer。(顺便说一句:我很喜欢Android XML工具!)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接