Πώς ευθυγραμμίζω τις προβολές στο κάτω μέρος της οθόνης;

Εδώ'είναι ο κώδικας διάταξης μου,

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

Αυτό που μοιάζει είναι στα αριστερά και αυτό που θέλω να μοιάζει είναι στα δεξιά.

Η προφανής απάντηση είναι να ορίσουμε το TextView σε fill_parent on height, αλλά αυτό προκαλεί ότι δεν αφήνεται χώρος για το κουμπί ή το πεδίο εισαγωγής.

Ουσιαστικά το θέμα είναι ότι θέλω το κουμπί υποβολής και η καταχώρηση κειμένου να έχουν σταθερό ύψος στο κάτω μέρος και η προβολή κειμένου να γεμίζει τον υπόλοιπο χώρο. Ομοίως, στην οριζόντια γραμμική διάταξη θέλω το κουμπί υποβολής να τυλίγει το περιεχόμενό του και η καταχώρηση κειμένου να γεμίζει τον υπόλοιπο χώρο.

Αν το πρώτο στοιχείο σε μια γραμμική διάταξη έχει την εντολή fill_parent, κάνει ακριβώς αυτό, χωρίς να αφήνει χώρο για άλλα στοιχεία. Πώς μπορώ να κάνω ένα στοιχείο που είναι το πρώτο σε μια γραμμική διάταξη να γεμίζει όλο το χώρο εκτός από το ελάχιστο που απαιτείται από τα υπόλοιπα στοιχεία της διάταξης;

<hr/&gt,

Οι σχετικές διατάξεις ήταν πράγματι η απάντηση:

    <?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>
Λύση

Ο σύγχρονος τρόπος για να το κάνετε αυτό είναι να έχετε ένα ConstraintLayout και να περιορίσετε το κάτω μέρος της προβολής στο κάτω μέρος του ConstraintLayout με app:layout_constraintBottom_toBottomOf="parent"

Το παρακάτω παράδειγμα δημιουργεί ένα FloatingActionButton που θα ευθυγραμμιστεί στο τέλος και στο κάτω μέρος της οθόνης.





Για λόγους αναφοράς, θα κρατήσω την παλιά μου απάντηση.

Πριν από την εισαγωγή του ConstraintLayout η απάντηση ήταν relative layout.


Εάν έχετε μια σχετική διάταξη που γεμίζει ολόκληρη την οθόνη, θα πρέπει να μπορείτε να χρησιμοποιήσετε το android:layout_alignParentBottom για να μετακινήσετε το κουμπί στο κάτω μέρος της οθόνης.

Αν οι προβολές σας στο κάτω μέρος δεν εμφανίζονται σε σχετική διάταξη τότε ίσως η διάταξη πάνω από αυτό καταλαμβάνει όλο το χώρο. Σε αυτή την περίπτωση μπορείτε να τοποθετήσετε την προβολή, που πρέπει να βρίσκεται στο κάτω μέρος, πρώτη στο αρχείο διάταξης και να τοποθετήσετε την υπόλοιπη διάταξη πάνω από τις προβολές με το android:layout_above. Αυτό επιτρέπει στην κάτω προβολή να καταλαμβάνει όσο χώρο χρειάζεται και η υπόλοιπη διάταξη μπορεί να γεμίσει όλη την υπόλοιπη οθόνη.

Σχόλια (6)

Σε ένα ScrollView αυτό δεν λειτουργεί, καθώς το RelativeLayout θα επικαλύπτει οτιδήποτε βρίσκεται στο ScrollView στο κάτω μέρος της σελίδας.

Το διόρθωσα χρησιμοποιώντας ένα δυναμικά τεντωμένο FrameLayout :















Σχόλια (4)

Δεν χρειάζεται καν να φωλιάσετε τη δεύτερη "σχετική" διάταξη μέσα στην πρώτη. Απλά χρησιμοποιήστε το android:layout_alignParentBottom="true" στο Button και στο EditText.

Σχόλια (1)