Как выравнивать представления в нижней части экрана?

Вот мой код макета;

          

Похоже, что это слева, и я хочу, чтобы это выглядело справа.

Android Layout - фактический (слева) и желаемый (справа)

Очевидным ответом является установка TextView на fill_parent по высоте, но это не оставляет места для кнопки или поля ввода. По сути, проблема заключается в том, что я хочу, чтобы кнопка отправки и текстовая запись были фиксированной высотой внизу и текстовым видом, чтобы заполнить остальную часть пространства, аналогично горизонтальной линейной компоновке. Я хочу, чтобы кнопка отправки обернула ее содержимое и для ввода текста, чтобы заполнить остальную часть пространства.

Если первому элементу в Linear Layout сообщается fill_parent, он делает именно это, не оставляя места для других предметов, как я могу получить элемент, который сначала в линейном макете, чтобы заполнить все пространство, кроме минимума, необходимого остальной части элементы в макете?

РЕДАКТИРОВАТЬ:

Относительные макеты действительно были ответом – Спасибо!

            

Я думаю, вы должны попробовать относительный макет .
Если у вас есть относительный макет, который заполняет весь экран, вы должны иметь возможность использовать android:layout_alignParentBottom чтобы переместить кнопку в нижней части экрана.

Если ваши представления внизу не отображаются в относительном макете, то, возможно, макет над ним занимает все пространство. В этом случае вы можете поместить представление, которое должно быть внизу, сначала в вашем файле макета и поместить остальную часть макета над представлениями с помощью android:layout_above . Это позволяет нижнему виду занимать столько места, сколько потребуется, а остальная часть макета может заполнить всю оставшуюся часть экрана.

В ScrollView это не работает, так как RelativeLayout затем перекрывает все, что находится в ScrollView в нижней части страницы.

Я исправил его с помощью динамического растяжения FrameLayout :

             

Вы можете сохранить свой первоначальный линейный макет, вставив относительный макет в линейный макет:

          

Ответ выше (Janusz) вполне корректен, но я лично не чувствую себя на 100% комфортно с RelativeLayouts, поэтому я предпочитаю вводить «filler», пустой TextView, например:

   

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

Вы можете сделать это с помощью LinearLayout или ScrollView. Иногда легче реализовать, чем RelativeLayout. Единственное, что вам нужно сделать, это добавить следующий вид перед представлениями, которые вы хотите выровнять в нижней части экрана:

  

Это создает пустой вид, заполняя пустое пространство и нажимая следующий вид в нижней части экрана.

Это также работает.

     

gravity =

Следуя элегантному решению 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. То, что он делает, это предоставление содержимого обложки для макета (тот, который содержит текст редактирования и кнопку), а затем тот, который имеет вес, занимает остальную часть макета. Я обнаружил это случайно.

  • В WPF, как я могу определить, является ли элемент управления видимым для пользователя?
  • Как обновить текстовое поле в графическом интерфейсе из другого streamа
  • Редактор графического редактора Netbeans, создающий собственный непонятный код
  • Отправка сообщений между двумя объектами JPanel
  • JTable Right Align Header
  • Разница между validate (), revalidate () и invalidate () в графическом интерфейсе Swing
  • Размер шрифта Bind в JavaFX?
  • Отключить ключ ускорителя ярлыков WPF (текст подчеркивания отсутствует)
  • Что такое MVP и MVC и в чем разница?
  • Алгоритм для выделения перекрывающихся прямоугольников?
  • Темный прозрачный слой над QMainWindow в Qt
  • Interesting Posts

    Как открыть второй экземпляр Skype с помощью Batch-файла?

    Что такое фильтры намерений в Android?

    Как я могу остановить страницы из смелых / курсивных упорядоченных номеров / букв списка?

    iOS 8.1 Симулятор всегда использует раскладку клавиатуры США, несмотря на немецкую аппаратную клавиатуру

    Windows и Ubuntu с двойной загрузкой. Нет меню для выбора ОС?

    Как повторно синхронизировать Mysql DB, если у Master и slave есть разная firebase database с репликацией Mysql?

    Как скопировать / создать экземпляр производного classа из указателя в полиморфный базовый class?

    Проверка того, является ли объект заданным типом в Swift

    По умолчанию шрифт Emacs не работает с новыми фреймами

    Пределы использования Firebase FCM

    Заказ строк по умолчанию для выбора запроса в oracle

    Как использовать PSCP для копирования файла с компьютера Unix на компьютер Windows, где целевой путь имеет пробелы?

    как преобразовать строку в числовые значения в mongodb

    OS X: Показать точный размер файла в Finder

    Windows 7 BSOD при загрузке после обновления Windows

    Давайте будем гением компьютера.