Равномерно расположенные виды в соседних макетах - PullRequest
0 голосов
/ 10 октября 2011

Я работаю над элементами управления для игры, и мне требуется, чтобы часть панели управления (серая на рисунке ниже) изменялась динамически, показывая либо один холст (слева), либо 5 кнопок (справа).Граница между представлениями нижнего ряда всегда должна располагаться точно в той же позиции х, что и граница между кнопками в верхнем ряду, как показано.В то же время все двенадцать верхних кнопок должны масштабироваться и распределяться равномерно.

Layout including canvas (left) and buttons (right)

Я рассмотрел несколько подходов, но пока ни один из них не выполняет всего, что я хочу:

  • Использование двух LinearLayouts, по одному для каждого ряда элементов управления: надежное выравнивание границ кажется невозможным, а замена части макета в лучшем случае затруднена.
  • Использование TableLayout:опять же, заменить часть макета сложно.
  • Использование RelativeLayout: изменение размера и выравнивание кнопок независимо от размера экрана не представляется возможным

Любые предложения для альтернативного методаили о том, как заставить работать один из вышеперечисленных подходов?Также было бы неплохо, если бы был какой-то способ анимировать смену видов, например, сдвигая кнопки слева над холстом.Спасибо!

Ответы [ 2 ]

0 голосов
/ 19 февраля 2012

Чтобы закрыть этот вопрос: я решил проблему, написав собственный класс макета, который размещает и измеряет дочерние представления, не обращая внимания на измеренный размер дочерних элементов. Фактически это дает мне поведение линейного макета с весами макетов, но более детерминировано с размещением границ.

ViewAnimator используется для переключения между холстом и кнопками.

0 голосов
/ 10 октября 2011

Интересно, я сделал это несколько недель назад. Я использовал это свойство объекта View: "Visibility". Таким образом, это означает, что в фиксированном положении я могу установить любой View для отображения, независимо от типа Layout, это может быть Visibility.GONE, Visibility.VISIBLE или Visibility.INVISIBLE.

В моем приложении я использовал RelativeLayout, чтобы установить относительное положение с правой стороны TextView. Попробуйте:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...