Android "layout_alignParentBottom" в относительном макете - PullRequest
10 голосов
/ 23 марта 2012

Итак, у меня есть этот макет:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/layout"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="#FFFF00"
                android:minHeight="100dp"
                android:layout_gravity="bottom"
        >
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:textColor="#000000"
            android:background="#FF0000"
            android:text="Hello World"
            />

    <Button
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_alignParentRight="true"
            android:text="button"/>
</RelativeLayout>

и вот как это выглядит:

enter image description here

но если я добавлю android:layout_alignParentBottom="true" к кнопке, вот как это выглядит:

enter image description here

  1. Может кто-нибудь, пожалуйста, объясните мне это поведение?
  2. Как поместить мою кнопку внизу, не изменяя размер желтого макета и не добавляя тысячи макетов для обходных путей?

Ответы [ 6 ]

8 голосов
/ 23 марта 2012

у меня это решение сработало

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/layout"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="#FFFF00"
                android:minHeight="100dp"
                android:orientation="horizontal"
                android:layout_gravity="bottom"
        >
    <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:textColor="#000000"
            android:background="#FF0000"
            android:text="Hello World"
            />

    <Button
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_gravity="bottom|right"
            android:text="button"/>
</FrameLayout>
1 голос
/ 23 марта 2012

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

1 голос
/ 23 марта 2012

это один быстрый экран

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="bottom"
    android:background="#FFFF00"
    android:minHeight="100dp" >



    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:text="button" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignTop="@+id/button1"
        android:background="#000000"
        android:text="TextView" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/button1"
        android:layout_alignParentLeft="true"
        android:background="#000000"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:orientation="vertical" >

    </LinearLayout>

</RelativeLayout>
0 голосов
/ 17 апреля 2018

Вы можете создать адаптивный интерфейс с ConstraintLayout

compile 'com.android.support.constraint:constraint-layout:1.0.2'

Результат будет выглядеть как

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/layout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:background="#FFFF00"
    android:minHeight="100dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#FF0000"
        android:text="Hello World"
        android:textColor="#000000"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />
</android.support.constraint.ConstraintLayout>

Предварительный просмотр: enter image description here

Подробнее здесь -
https://developer.android.com/training/constraint-layout/index.html
https://android -developers.googleblog.com / 2017/08 / понимание ПРОИЗВОДИТЕЛЬНОСТИ выгоды-of.html

0 голосов
/ 19 июля 2017

К сожалению, ошибка все еще существует в более новых версиях Android.

Во всяком случае, я обнаружил, что следующее может решить эту проблему:

  1. Удалить minHeight of RelativeLayout

  2. Вставка TextView в LinearLayout:

    <LinearLayout
        android:id="@+id/tvLayout"
        android:layout_alignParentTop="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:minHeight="100dp"
        android:gravity="top"
        >
        <TextView 
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#FFFF00FF"
            android:text="Helo"
            />
    </LinearLayout>
    
  3. Удалить layout_alignParentBottom из Button и добавить layout_alignBottom = "@ id / tvLayout"

Теперь LinearLayout «контролирует» высоту RelativeLayout. Если высота TextView больше, чем minHeight, равная 100dp, она будет расширена.

И кнопка всегда выравнивает свое дно по LinearLayout, равному RelativeLayout единице.

0 голосов
/ 23 марта 2012
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="bottom"
    android:background="#FFFF00"
    android:minHeight="100dp" >

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:textColor="#000000"
            android:background="#FF0000"
            android:text="Hello World"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:text="button" />

</RelativeLayout>

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

...