Как выравнивать представления в нижней части экрана?
Вот мой код макета;
Похоже, что это слева, и я хочу, чтобы это выглядело справа.
- Неверная операция поперечного streamа
- java - Как бы я динамически добавлял компонент swing в gui при нажатии?
- Android: что выбрать для значений кода запроса?
- Как я могу улучшить внешний вид приложения для Android?
- как изменить пользовательский интерфейс в зависимости от выбора поля со списком
Очевидным ответом является установка TextView на fill_parent по высоте, но это не оставляет места для кнопки или поля ввода. По сути, проблема заключается в том, что я хочу, чтобы кнопка отправки и текстовая запись были фиксированной высотой внизу и текстовым видом, чтобы заполнить остальную часть пространства, аналогично горизонтальной линейной компоновке. Я хочу, чтобы кнопка отправки обернула ее содержимое и для ввода текста, чтобы заполнить остальную часть пространства.
Если первому элементу в Linear Layout сообщается fill_parent, он делает именно это, не оставляя места для других предметов, как я могу получить элемент, который сначала в линейном макете, чтобы заполнить все пространство, кроме минимума, необходимого остальной части элементы в макете?
РЕДАКТИРОВАТЬ:
Относительные макеты действительно были ответом – Спасибо!
- Установить альфа / непрозрачность макета
- установить и отключить иконки JToggleButton
- Подвижные столбцы со значением с помощью java
- Как я могу проверить, видимо ли это вид или нет в Android?
- Обновление пользовательского интерфейса из streamа
- Доступ к компонентам GUI из другого classа
- Swing vs JavaFx для настольных приложений
- Безопасно ли создавать виджеты Swing / AWT NOT на тему Dispatch Event?
Я думаю, вы должны попробовать относительный макет .
Если у вас есть относительный макет, который заполняет весь экран, вы должны иметь возможность использовать android:layout_alignParentBottom
чтобы переместить кнопку в нижней части экрана.
Если ваши представления внизу не отображаются в относительном макете, то, возможно, макет над ним занимает все пространство. В этом случае вы можете поместить представление, которое должно быть внизу, сначала в вашем файле макета и поместить остальную часть макета над представлениями с помощью android:layout_above
. Это позволяет нижнему виду занимать столько места, сколько потребуется, а остальная часть макета может заполнить всю оставшуюся часть экрана.
В ScrollView
это не работает, так как RelativeLayout
затем перекрывает все, что находится в ScrollView
в нижней части страницы.
Я исправил его с помощью динамического растяжения FrameLayout
:
Вы можете сохранить свой первоначальный линейный макет, вставив относительный макет в линейный макет:
Ответ выше (Janusz) вполне корректен, но я лично не чувствую себя на 100% комфортно с RelativeLayouts, поэтому я предпочитаю вводить «filler», пустой TextView, например:
перед элементом, который должен находиться в нижней части экрана.
Вы можете сделать это с помощью LinearLayout или ScrollView. Иногда легче реализовать, чем RelativeLayout. Единственное, что вам нужно сделать, это добавить следующий вид перед представлениями, которые вы хотите выровнять в нижней части экрана:
Это создает пустой вид, заполняя пустое пространство и нажимая следующий вид в нижней части экрана.
Это также работает.
Следуя элегантному решению Timores, я обнаружил, что следующее создает вертикальное заполнение вертикального LinearLayout и горизонтальное заполнение горизонтального LinearLayout:
Вам даже не нужно вставлять второй relative
макет внутри первого. Просто используйте android:layout_alignParentBottom="true"
в Button и EditText .
Если вы не хотите делать много изменений, вы можете просто поставить:
android:layout_weight="1"
для TextView с ID как @+id/TextView
т.е.
1.Используйте ConstraintLayout
в корневом макете
И установите app:layout_constraintBottom_toBottomOf="parent"
чтобы позволить Layout в нижней части экрана
2.Используйте FrameLayout
в корневом FrameLayout
Просто установите android:layout_gravity="bottom"
в вашем макете
3.Используйте LinearLayout
в своем корневом LinearLayout
( android:orientation="vertical"
)
(1) Установите макет android:layout_weight="1"
в верхней части вашего макета
(2) Установите дочерний LinearLayout
для android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="bottom"
Основным атрибутом является ndroid:gravity="bottom"
, пусть дочерний вид находится в нижней части макета.
4. Используйте RelativeLayout
в корневом макете
И установите android:layout_alignParentBottom="true"
чтобы позволить макету в нижней части экрана
ВЫВОД
Создавая как HEADER, так и FOOTER, вот пример
[Layout XML]
[ Скриншот ]
Надеюсь, это полезно. Благодаря!!
используйте под кнопкой выравнивания кода, чтобы
Используйте android:layout_alignParentBottom="true"
в
.
Это определенно поможет.
Если у вас есть такая иерархия:
|-- |--
Во-первых, примените android:fillViewport="true"
к ScrollView
а затем примените android:layout_alignParentBottom="true"
к LinearLayout
.
Это сработало для меня отлично.
Для такого случая всегда используйте RelativeLayouts. LinearLayout не предназначен для такого использования.
Вы можете просто дать вашему верхнему дочернему виду (TextView @ + id / TextView ) атрибут: android:layout_weight="1"
.
Это заставит все остальные элементы под ним снизу.
Я использовал решение Janusz, но добавил дополнение к последнему виду, так как верхняя часть моего макета была ScrollView. ScrollView будет частично скрыт, поскольку он растет с контентом. Использование android: paddingBottom в последнем представлении помогает показать весь контент в ScrollView.
Это можно сделать с помощью линейной компоновки. Просто поставьте Height = 0dp и weight = 1 в макет выше, а тот, который вы хотите в нижней части, просто напишите height = wrap content и no weight. То, что он делает, это предоставление содержимого обложки для макета (тот, который содержит текст редактирования и кнопку), а затем тот, который имеет вес, занимает остальную часть макета. Я обнаружил это случайно.