2013-02-25 3 views
3

Я новичок в разработке android. Я пытаюсь использовать GridLayout для выполнения моего дизайна пользовательского интерфейса.Изменение числа строк/столбцов GridLayout во время выполнения в android

Это сценарий:

Я определил GridLayout в XML-файле следующим образом

<GridLayout 
    android:id="@+id/gridLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_above="@id/linearLayoutBottomLeft" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@id/linearLayoutTopLeft" 
    android:layout_toLeftOf="@id/textView" > 
</GridLayout> 

Затем я поставил его в OnCreate моей деятельности в() метод, как следующие:

GridLayout gridLayout = (GridLayout) findViewById(R.id.gridLayout); 
gridLayout.invalidate(); 
int rowNumber = 4; 
int colNumber = 4; 
gridLayout.setRowCount(rowNumber); 
gridLayout.setColumnCount(colNumber); 

пока все хорошо, все работает хорошо. Однако у меня также есть кнопки. В событии нажатия кнопки я изменил rowNumber и colNumber, установил их во время выполнения. Это вызывает некоторую ошибку, я думаю ...

Так что мой вопрос в том, можно ли задать номер строки и номер столбца во время выполнения для gridLayout.

Если это не разрешено в android, то какая хорошая практика реализовать GUI, как то, что я описал выше.

Любая помощь будет оценена по достоинству.

ответ

0

Сегодня я выяснил, как решить эту проблему.

В файле xml я заменил GridLayout на LinearLayout и сделал динамическое добавление girdlayout в качестве дочернего элемента linearlayout. Теперь количество строк/столбцов можно изменить в обработчике событий нажатия кнопок.

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

1

Вам понадобится выполнить gridLayout.removeAllChildren().

Invalidate - это способ позволить системе View знать, что содержимое View изменилось и что его нужно перерисовать.

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