Подтвердить что ты не робот

Android Linear Layout - Как сохранить элемент в нижней части экрана?

У меня есть TextView, который я хочу установить в нижней части ландшафтной активности, которая использует LinearLayout с элементами, расположенными вертикально.

Я установил android:gravity="bottom" в текстовом представлении, но мне все еще нравится быть чуть ниже последнего элемента LinearLayout точно, чего я не хочу делать.

Любые предложения?

4b9b3361

Ответ 1

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

В современном Android я бы использовал ConstraintLayout для этого. Это более производительный и простой.

<ConstraintLayout>
   <View
      android:id="@+id/view1"
      ...other attributes elided... />
   <View
      android:id="@id/view2"        
      app:layout_constraintTop_toBottomOf="@id/view1" />
      ...other attributes elided... />

   ...etc for other views that should be aligned top to bottom...

   <TextView
    app:layout_constraintBottom_toBottomOf="parent" />

Если вы не хотите использовать ConstraintLayout, использование LinearLayout с расширяющимся представлением - это простой и отличный способ справиться с занятием дополнительного пространства (см. Ответ @Matthew Wills). Если вы не хотите расширять фон любого из видов над нижним видом, вы можете добавить невидимый вид, чтобы занять место.

Ответ, который я изначально дал, работает, но неэффективен. Неэффективность может не иметь большого значения для одного макета верхнего уровня, но это будет ужасной реализацией в ListView или RecyclerView, и просто нет никаких причин делать это, так как есть лучшие способы сделать это, которые примерно тот же уровень усилий и сложности, если не проще.

Выньте TextView из LinearLayout, затем поместите LinearLayout и TextView в RelativeLayout. Добавьте атрибут android:layout_alignParentBottom="true" в TextView. Со всеми пространствами имен и другими атрибутами, за исключением указанного выше атрибута:

<RelativeLayout>
  <LinearLayout>
    <!-- All your other elements in here -->
  </LinearLayout>
  <TextView
    android:layout_alignParentBottom="true" />
</RelativeLayout>

Ответ 2

Вам нужно будет расширить один из ваших верхних видов, чтобы заполнить оставшееся пространство, установив на него android:layout_weight="1". Это подтолкнет ваш последний снимок вниз.

Вот краткий очерк о том, что я имею в виду:

<LinearLayout android:orientation="vertical">
    <View/>
    <View android:layout_weight="1"/>
    <View/>
    <View android:id="@+id/bottom"/>
</LinearLayout>

где каждая из дочерних высот представления "wrap_content", а все остальное - "fill_parent".

Ответ 3

Я думаю, что это будет идеальное решение:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <!-- Other views -->
    <Space
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

    <!-- Target view below -->
    <View
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

</LinearLayout>

Ответ 4

Вы должны поместить параметр тяжести вниз не в текстовое поле, а в линейной компоновке. Вот так:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="bottom|end">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Something"/>
</LinearLayout>

Ответ 5

Шаг 1: Создайте два вида внутри линейного макета

Шаг 2: Первый вид должен быть установлен на Android: layout_weight = "1"

Шаг 3: Второй вид будет автоматически помещен вниз

<LinearLayout
android:id="@+id/botton_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

    <View
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />

    <Button
    android:id="@+id/btn_health_advice"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>


</LinearLayout>

Ответ 6

Вы также можете использовать

android:layout_gravity="bottom"

для вашего текста

Ответ 7

НРАВИТСЯ ЭТО

 <LinearLayout
android:id="@+id/LinearLayouts02"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="bottom|end">

<TextView
    android:id="@+id/texts1"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:layout_weight="2"
    android:text="@string/forgotpass"
    android:padding="7dp"
    android:gravity="bottom|center_horizontal"
    android:paddingLeft="10dp"
    android:layout_marginBottom="30dp"
    android:bottomLeftRadius="10dp"
    android:bottomRightRadius="50dp"
    android:fontFamily="sans-serif-condensed"
    android:textColor="@color/colorAccent"
    android:textStyle="bold"
    android:textSize="16sp"
    android:topLeftRadius="10dp"
    android:topRightRadius="10dp"
   />

</LinearLayout>

Ответ 8

попробуйте это

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textViewProfileName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>