Равномерно расположенные виды в смежных макетах

#android #android-layout

#Android #android-макет

Вопрос:

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

Макет, включающий холст (слева) и кнопки (справа)

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

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

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

Ответ №1:

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

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

Комментарии:

1. Хотя это можно использовать для выбора отображаемых представлений, моя основная трудность заключается в правильном выравнивании представлений, то есть равномерно расположенных кнопок сверху и видов снизу, которые совпадают с кнопками сверху.

2. сделайте их равными по размеру, RelativeLayout чтобы они были хорошо выровнены.

3. Что бы я ни пытался, RelativeLayout не будет масштабировать кнопки, чтобы заполнить всю ширину экрана (если, конечно, я не укажу точное количество пикселей для своего устройства, которое прерывается, как только изменяется разрешение экрана), и я не могу получить верхний ряд кнопок такой же высоты, как унижняя строка. Любые предложения о том, как правильно масштабировать?

Ответ №2:

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

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