Как выровнять виды внизу экрана? - PullRequest
619 голосов
/ 05 марта 2010

Вот мой код компоновки;

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView android:text="@string/welcome" 
        android:id="@+id/TextView" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">
    </TextView>

    <LinearLayout android:id="@+id/LinearLayout" 
        android:orientation="horizontal"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:gravity="bottom">

            <EditText android:id="@+id/EditText" 
                android:layout_width="fill_parent" 
                android:layout_height="wrap_content">
            </EditText>

            <Button android:text="@string/label_submit_button" 
                android:id="@+id/Button" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content">
            </Button>

    </LinearLayout>

</LinearLayout>

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

Android Layout - Actual (Left) and Desired (Right)

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

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

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

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

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">

    <TextView 
        android:text="@string/welcome" 
        android:id="@+id/TextView"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true">
    </TextView>

    <RelativeLayout 
        android:id="@+id/InnerRelativeLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" >

        <Button 
            android:text="@string/label_submit_button" 
            android:id="@+id/Button"
            android:layout_alignParentRight="true" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
        </Button>

        <EditText 
            android:id="@+id/EditText" 
            android:layout_width="fill_parent"
            android:layout_toLeftOf="@id/Button"
            android:layout_height="wrap_content">
        </EditText>

    </RelativeLayout>

</RelativeLayout>

Ответы [ 18 ]

7 голосов
/ 10 мая 2015

Создание заголовка и нижнего колонтитула, вот пример

[Layout XML]

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/backgroundcolor"
    tools:context=".MainActivity">

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:background="#FF0000">
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:layout_alignParentBottom="true"
        android:background="#FFFF00">
    </RelativeLayout>

</RelativeLayout>

[Скриншот]

enter image description here

Надеюсь, это полезно. Спасибо !!

4 голосов
/ 17 декабря 2013

используйте кнопку выравнивания кода ниже, чтобы подтвердить ее работу

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btn_back"
        android:layout_width="100dp"
        android:layout_height="80dp"
        android:text="Back" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.97"
        android:gravity="center"
        android:text="Payment Page" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:layout_weight="1"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:text="Submit"/>
    </LinearLayout>

</LinearLayout>
3 голосов
/ 20 мая 2015

Для такого случая всегда используйте RelativeLayouts. LinearLayout не предназначен для такого использования.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/db1_root"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <!-- Place your layout here -->

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_gravity="bottom"
    android:orientation="horizontal"
    android:paddingLeft="20dp"
    android:paddingRight="20dp" >

    <Button
        android:id="@+id/setup_macroSavebtn"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Save" />

    <Button
        android:id="@+id/setup_macroCancelbtn"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Cancel" />

    </LinearLayout>

</RelativeLayout>
2 голосов
/ 04 июля 2013

Используйте android:layout_alignParentBottom="true" в вашем <RelativeLayout>.

Это определенно поможет.

2 голосов
/ 18 февраля 2016

Вы можете просто дать вашему верхнему дочернему виду (TextView @ + id / TextView ) атрибут: android:layout_weight="1".

Это заставит все остальные элементы, расположенные ниже, снизу.

2 голосов
/ 15 апреля 2015

Если у вас есть иерархия, подобная этой:

<ScrollView> 
  |-- <RelativeLayout> 
    |-- <LinearLayout>

Сначала примените android:fillViewport="true" к ScrollView, а затем примените android:layout_alignParentBottom="true" к LinearLayout.

Это прекрасно сработало для меня.

<ScrollView
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:scrollbars="none"
    android:fillViewport="true">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:id="@+id/linearLayoutHorizontal"
            android:layout_alignParentBottom="true">
        </LinearLayout>
    </RelativeLayout>
</ScrollView>
0 голосов
/ 05 сентября 2013

Это можно сделать и с помощью линейного макета Просто укажите Высота = 0dp и вес = 1 для макета выше, а тот, который вы хотите внизу, просто напишите высоту = содержимое переноса и без веса. То, что он делает, это обеспечивает перенос содержимого для макета (тот, который содержит текст и кнопку редактирования), а затем тот, который имеет вес, занимает остальную часть макета. Я обнаружил это случайно.

0 голосов
/ 22 марта 2012

Я использовал решение, опубликованное Janusz, но добавил заполнение к последнему представлению, поскольку верхней частью моего макета был ScrollView. ScrollView будет частично скрыт по мере роста с содержанием. Использование android: paddingBottom при последнем просмотре помогает отобразить весь контент в ScrollView.

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