android - with - Come allineare le visualizzazioni nella parte inferiore dello schermo?




menu android html (12)

1. Usare ConstraintLayout nel proprio layout radice

E imposta app:layout_constraintBottom_toBottomOf="parent" per lasciare il layout nella parte inferiore dello schermo

android:layout_weight="1"

2. FrameLayout nel tuo layout di root

Imposta android:layout_gravity="bottom" nel tuo layout

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

LinearLayout nel tuo layout di root ( android:orientation="vertical" )

(1) Imposta un layout android:layout_weight="1" nella parte superiore del tuo Layout

<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) Imposta il bambino LinearLayout per android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="bottom"

L'attributo principale è ndroid:gravity="bottom" , lascia il child View nella parte inferiore del Layout.

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

4.Utilizzare RelativeLayout nel layout radice

E imposta android:layout_alignParentBottom="true" per lasciare il layout nella parte inferiore dello schermo

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

PRODUZIONE

Ecco il mio codice di layout;

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

Ciò che appare è a sinistra e quello che voglio che sia è sulla destra.

La risposta ovvia è impostare TextView su fill_parent in altezza, ma ciò non lascia spazio per il pulsante o il campo di immissione. In sostanza, il problema è che voglio che il pulsante di invio e l'immissione del testo siano un'altezza fissa nella parte inferiore e la visualizzazione del testo per riempire il resto dello spazio, analogamente nel layout Lineare orizzontale Voglio che il pulsante di invio avvolga il suo contenuto e per l'inserimento del testo per riempire il resto dello spazio.

Se il primo elemento in un layout lineare viene detto a fill_parent fa esattamente questo, non lasciando spazio ad altri oggetti, come faccio a ottenere un oggetto che è il primo in un layout lineare a riempire tutto lo spazio oltre al minimo richiesto dal resto di gli articoli nel layout?

MODIFICARE:

I layout relativi erano davvero la risposta - Grazie!

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

Anche questo funziona.

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


Ho usato la soluzione Janusz pubblicata, ma ho aggiunto il padding all'ultima vista poiché la parte superiore del mio layout era ScrollView. ScrollView sarà parzialmente nascosto man mano che cresce con i contenuti. Usando android: paddingBottom sull'ultima vista aiuta a mostrare tutto il contenuto in ScrollView.


In una ScrollView questo non funziona, in quanto il RelativeLayout si sovrapporrebbe quindi a qualsiasi cosa si trovi nella ScrollView nella parte inferiore della pagina.

L'ho risolto usando un FrameLayout allungava in modo dinamico:

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

Nel caso tu abbia una gerarchia come questa:

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

Innanzitutto, applica android:fillViewport="true" a ScrollView e quindi applica android:layout_alignParentBottom="true" al LinearLayout .

Questo ha funzionato perfettamente per me.

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

Non è nemmeno necessario nidificare il secondo layout relative all'interno del primo. Basta usare android:layout_alignParentBottom="true" nel pulsante e EditText .


Per un caso come questo usa sempre RelativeLayouts. Un LinearLayout non è destinato a tale utilizzo.

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

Puoi farlo anche con LinearLayout o ScrollView. A volte è più semplice implementare un RelativeLayout. L'unica cosa che devi fare è aggiungere la seguente vista prima delle viste che vuoi allineare alla parte inferiore dello schermo:

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

Questo crea una vista vuota, riempiendo lo spazio vuoto e spingendo le prossime viste nella parte inferiore dello schermo.


Puoi semplicemente dare la tua vista figlio superiore (TextView @ + id / TextView ) ad un attributo: android:layout_weight="1" .

Questo costringerà tutti gli altri elementi sotto di esso verso il basso.


Questo può essere fatto anche con il layout lineare. Basta fornire Altezza = 0 dpi e peso = 1 al layout sopra e quello che vuoi in basso basta scrivere altezza = avvolgere il contenuto e nessun peso. Quello che fa è fornire il contenuto di avvolgimento per il layout (quello che contiene il testo e il pulsante di modifica) e poi quello che ha il peso che occupa il resto del layout. L'ho scoperto per caso.


Seguendo l'elegante soluzione di Timores, ho scoperto che quanto segue crea un riempimento verticale in un LinearLayout verticale e un riempimento orizzontale in un LinearLayout orizzontale:

<Space
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1" />

Usa android:layout_alignParentBottom="true" nel tuo <RelativeLayout> .

Questo sicuramente aiuterà.





android-layout