2010-06-02 3 views
2

Я пишу приложение для телефонов Android для шахматной игры «Человек против человека» через Интернет. Я изучал некоторые учебные пособия, узнал, как разрабатывать приложения для Android, и нашел очень хороший пример создания галерей (это был пример использования GridView для создания галереи о собаках), и идея пришла к рисованию шахматной таблицы с использованием GridView, потому что в примере проекта также обрабатывается точка события &, и я намеревался использовать одно и то же событие таким же образом, но для другой цели. Игра работает хорошо (в настоящее время это версия hotseat), однако меня очень расстраивает тот факт, что всякий раз, когда я поворачиваю экран телефона, мой GridView становится истеричным и помещает пустое пространство в шахматную таблицу между столбцами. Я понял, что причина этого в том, что ширина GridView такая же, как и у ее родителя, и GridView пытается заполнить свой родительский элемент, но должно (и, вероятно,) быть простым решением избавиться от этой проблемы. Однако после целого дня исследования я не нашел подсказки, чтобы помочь мне сделать прекрасный рисунок моей шахматной таблицы без отрицательного побочного эффекта в функциональности. Шахматный стол выглядит хорошо, если телефон находится в режиме Портрет, но в ландшафтном режиме это далеко не приятно. Это, как я могу решить, будем ли мы в портретном или ландшафтном режиме:GridView: Как я могу избавиться от лишнего пространства от моего объекта GirdView?

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

+0

С другой стороны, вы читаете это - вы сказали, что поняли решение. Не могли бы вы поделиться им? – DougW

+0

Lajos, не могли бы вы поделиться своим решением? – petrnohejl

ответ

4

GridView, вероятно, не то, что вы хотите здесь. GridView, как и ListView, предназначен для эффективного представления прокручиваемых неограниченных наборов данных. Шахматная доска не является ни тем, ни другим. Настраивать программный код TableLayout - это, вероятно, то, что вы хотите.

Причина, по которой ваша GridLayout, похоже, не почитает android:layout_width="wrap_content", заключается в том, что поскольку GridView предназначен для отображения неограниченных данных, где каждый элемент может иметь разный размер, он не верит, что элементы имеют равномерную ширину, которая может быть разумно измеряется. (Если адаптер имеет 10 000 элементов, должен ли GridView измерять их все, чтобы определить правильную ширину столбца?)

Если вы попытаетесь использовать GridView для этого в любом случае (что вам не нужно), попробуйте установить явное значение для android:layout_width, а не wrap_content. Это остановит расширение GridView, чтобы заполнить доступное пространство. Вы также можете использовать альтернативные макеты для разных ориентаций экрана, используя систему ресурсов, как описано here. В качестве альтернативы вы можете отключить режим ландшафта, используя android:screenOrientation="portrait" в теге активности в манифесте. ;)

2

Проблема просто разрешима с использованием метода setPadding вашего объекта GridView.

+0

Я хотел бы поблагодарить вас за ваш глубокий ответ, это помогло мне найти правильный ответ. –

+0

У меня такая же проблема, как у Lajos, но заполнение не помогло мне ... http://stackoverflow.com/questions/7705330/gridview-and-excess-space-padding – petrnohejl

+0

Даже у меня такая же проблема, описанная здесь, но заполнение не помогло мне .. поэтому любой, пожалуйста, предложите мне решение этой проблемы. – Dory

Смежные вопросы