Question Comment aligner les vues en bas de l'écran?


Voici mon code de disposition;

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

Ce que cela ressemble est sur la gauche et ce que je veux qu'il ressemble est sur la droite.

Android Layout - Actual (Left) and Desired (Right)

La réponse évidente est de définir le TextView à fill_parent sur la hauteur, mais cela ne laisse aucune place pour le bouton ou le champ d'entrée. Essentiellement, le problème est que je veux que le bouton Soumettre et l'entrée de texte soient une hauteur fixe en bas et la vue de texte pour remplir le reste de l'espace, de même dans la disposition linéaire horizontale Je veux que le bouton Soumettre son contenu pour l'entrée de texte pour remplir le reste de l'espace.

Si le premier élément dans une disposition linéaire est dit à fill_parent, il fait exactement cela, ne laissant aucune place aux autres éléments, comment puis-je obtenir un élément qui est d'abord dans une disposition linéaire pour remplir tout l'espace du minimum requis par le reste de les éléments de la mise en page?

MODIFIER:

Les mises en page relatives étaient en effet la réponse - Merci!

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

582
2018-03-05 13:04


origine


Réponses:


Je pense que vous devriez essayer un Disposition relative.
Si vous avez une disposition relative qui remplit tout l'écran, vous devriez pouvoir utiliser android:layout_alignParentBottom pour déplacer le bouton vers le bas de l'écran.

Si vos vues en bas ne sont pas affichées dans une mise en page relative, alors la mise en page ci-dessus prend tout l'espace. Dans ce cas, vous pouvez placer la vue qui doit être en bas, d'abord dans votre fichier de mise en page et positionner le reste de la mise en page au-dessus des vues avec android:layout_above. Cela permet à la vue du bas de prendre autant d'espace que nécessaire et le reste de la disposition peut remplir tout le reste de l'écran.


481
2018-03-05 13:14



Dans un ScrollView cela ne fonctionne pas, comme le RelativeLayout serait alors chevaucher tout ce qui est dans le ScrollView au bas de la page.

Je l'ai réparé en utilisant un étirement dynamique FrameLayout :

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

136
2017-11-04 16:50



Vous pouvez conserver votre disposition linéaire initiale en imbriquant la disposition relative dans la disposition linéaire:

<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

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

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <Button android:text="submit" 
            android:id="@+id/Button" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true">
        </Button>
        <EditText android:id="@+id/EditText" 
            android:layout_width="match_parent" 
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@id/Button"
            android:layout_alignParentBottom="true">
        </EditText>
    </RelativeLayout>
</LinearLayout>

63
2018-04-24 00:53



La réponse ci-dessus (par Janusz) est tout à fait correcte, mais personnellement, je ne me sens pas à 100% confortable avec RelativeLayouts, donc je préfère introduire un «remplissage», un TextView vide, comme ceci:

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

avant l'élément qui devrait être au bas de l'écran.


37
2018-04-17 15:39



Vous pouvez le faire avec LinearLayout ou ScrollView, aussi. Parfois, il est plus facile d'implémenter ensuite un RelativeLayout. La seule chose que vous devez faire est d'ajouter la vue suivante avant les vues que vous souhaitez aligner en bas de l'écran:

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

Cela crée une vue vide, remplissant l'espace vide et poussant les vues suivantes vers le bas de l'écran.


27
2018-03-10 00:30



Cela fonctionne aussi.

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

gravity="bottom" to float LinearLayout elements to bottom


26
2017-12-28 14:03



Suite à la solution élégante de Timores, j'ai trouvé que ce qui suit crée un remplissage vertical dans un LinearLayout vertical et un remplissage horizontal dans un LinearLayout horizontal:

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

16
2017-11-15 21:51



Vous n'avez même pas besoin d'imbriquer la seconde relative disposition à l'intérieur du premier. Utilisez simplement le android:layout_alignParentBottom="true" dans le Bouton et Éditer le texte.


14
2018-03-05 15:05



Si vous ne souhaitez pas apporter de nombreux changements, vous pouvez simplement mettre:

android:layout_weight="1"

pour le TextView ayant ID comme @+id/TextViewc'est à dire

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

9
2017-09-23 12:16



Création de HEADER et FOOTER, voici un exemple

[Mise en page XML]

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/backgroundcolor"
    tools:context=".MainActivity">

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:background="#FF0000">
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:layout_alignParentBottom="true"
        android:background="#FFFF00">
    </RelativeLayout>

</RelativeLayout>

[ Capture d'écran ]

enter image description here

J'espère que c'est utile. Merci!!


6
2018-05-10 02:25