Динамически менять номер столбца в 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. Как это сделать?

Solutions Collecting From Web of "Динамически менять номер столбца в gridview?"

Используя адаптивные ресурсы: убедитесь, что в папке ресурсов /res вас есть следующие папки: values-land и values-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

У меня была эта проблема, и ответ гунара был очень полезен, но я думаю, что могу добавить некоторые подробности. Если в AndroidStudio установите представление каталога в «Project» (чтобы вы могли видеть ваши новые каталоги) и щелкните правой кнопкой мыши на «res», чтобы создать новый каталог ресурсов. Сделайте два новых каталога, «значения-порт» и «значения-земли» в качестве значения типа.

Затем в value-land добавьте целочисленный элемент:

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

И в value-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"/> 

Это, по сути, решение гунара (спасибо гунару!), Но он добавляет некоторые детали, которые я обнаружил на этом пути. Например, я не мог видеть каталоги res, которые я создавал, пока не изменил представление Project, и уже существует тип целочисленного ресурса, поэтому нам не нужно объявлять столбцы как элемент, а затем задавать тип integer. (BTW: Я люблю инструмент Android XML!)