#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 используется для переключения между холстом и кнопками.