android - ¿Cómo alinear vistas en la parte inferior de la pantalla?




9 Answers

En un ScrollView esto no funciona, ya que RelativeLayout se superpondría con lo que haya en el ScrollView en la parte inferior de la página.

Lo arreglé usando un FrameLayout dinámicamente extendido:

<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent" 
    android:layout_width="match_parent"
    android:fillViewport="true">
    <LinearLayout 
        android:id="@+id/LinearLayout01"
        android:layout_width="match_parent" 
        android:layout_height="match_parent"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical">

                <!-- content goes here -->

                <!-- stretching frame layout, using layout_weight -->
        <FrameLayout
            android:layout_width="match_parent" 
            android:layout_height="0dp"
            android:layout_weight="1">
        </FrameLayout>

                <!-- content fixated to the bottom of the screen -->
        <LinearLayout 
            android:layout_width="match_parent" 
            android:layout_height="wrap_content"
            android:orientation="horizontal">
                                   <!-- your bottom content -->
        </LinearLayout>
    </LinearLayout>
</ScrollView>
android xml user-interface android-layout

Aquí está mi código de diseño;

<?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>

El aspecto que tiene está a la izquierda y el aspecto que quiero que tenga a la derecha.

La respuesta obvia es configurar TextView para fill_parent en altura, pero esto no deja espacio para el botón o el campo de entrada. Esencialmente, el problema es que quiero que el botón de envío y la entrada de texto tengan una altura fija en la parte inferior y que la vista de texto llene el resto del espacio, de manera similar en el diseño lineal horizontal Quiero que el botón de envío incluya su contenido y para que la entrada de texto llene el resto del espacio.

Si al primer elemento de un diseño lineal se le indica que se llene con paterno, hace exactamente eso, sin dejar espacio para otros elementos, ¿cómo puedo obtener un elemento que sea el primero en un diseño lineal para llenar todo el espacio aparte del mínimo requerido por el resto de Los elementos en el diseño?

EDITAR:

Disposiciones relativas fueron de hecho la respuesta - ¡Gracias!

    <?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>



La respuesta anterior (por Janusz) es bastante correcta, pero personalmente no me siento cómodo al 100% con RelativeLayouts, así que prefiero introducir un 'relleno', TextView vacío, como este:

<!-- filler -->
<TextView android:layout_height="0dip" 
          android:layout_width="fill_parent"
          android:layout_weight="1" />

antes del elemento que debe estar en la parte inferior de la pantalla.




Esto también funciona.

<LinearLayout 
    android:id="@+id/linearLayout4"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_below="@+id/linearLayout3"
    android:layout_centerHorizontal="true"
    android:orientation="horizontal" 
    android:gravity="bottom"
    android:layout_alignParentBottom="true"
    android:layout_marginTop="20dp"
>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" 

    />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" 


    />

</LinearLayout>




Ni siquiera es necesario anidar el segundo diseño relative dentro del primero. Simplemente use el android:layout_alignParentBottom="true" en el botón y el texto de edición .




1.Utilice ConstraintLayout en su diseño de raíz

Y configura la app:layout_constraintBottom_toBottomOf="parent" para que el diseño en la parte inferior de la pantalla

<LinearLayout
    android:id="@+id/LinearLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_constraintBottom_toBottomOf="parent">
</LinearLayout>

2.Utilice FrameLayout en el diseño de su raíz

Solo establece android:layout_gravity="bottom" en tu diseño

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

3. Use LinearLayout en su diseño de raíz ( android:orientation="vertical" )

(1) Establezca un android:layout_weight="1" diseño android:layout_weight="1" en la parte superior de su diseño

<TextView
    android:id="@+id/TextView"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:text="welcome" />

(2) Establezca el LinearLayout secundario para android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="bottom"

El atributo principal es ndroid:gravity="bottom" , que el niño vea en la parte inferior de Layout.

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

4.Utilice RelativeLayout en el diseño raíz

Y configure android:layout_alignParentBottom="true" para permitir que el diseño en la parte inferior de la pantalla

<LinearLayout
    android:id="@+id/LinearLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:orientation="horizontal">
</LinearLayout>

SALIDA




use el botón de alineación del código a continuación para reducir su funcionamiento

    <?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>



Use android:layout_alignParentBottom="true" en su <RelativeLayout> .

Esto definitivamente ayudará.




Solo puede asignar a su vista superior (el TextView @ + id / TextView ) un atributo: android:layout_weight="1" .

Esto forzará a todos los demás elementos debajo de él hacia abajo




Esto también se puede hacer con un diseño lineal. Simplemente proporcione Altura = 0dp y peso = 1 al diseño anterior y el que desee en la parte inferior, simplemente escriba altura = contenido de envoltura y sin peso. Lo que hace es que proporciona contenido de ajuste para el diseño (el que contiene el texto y el botón de edición) y luego el que tiene peso ocupa el resto del diseño. Descubrí esto por accidente.




Related