Android: Aligner le bouton en bas à droite de l'écran à l'aide de FrameLayout?

106

J'essaie de placer les commandes de zoom de la carte dans le coin inférieur droit de l'écran. Je pourrais le faire avec RelativeLayout en utilisant à la fois alignParentBottom="true"et alignParentRight="true", mais avec Framelayout, je n'ai pas trouvé de tels attributs. Comment l'aligner sur le coin inférieur droit de l'écran?

Rohith Nandakumar
la source

Réponses:

252

En fait, c'est possible, malgré ce qui est dit dans d'autres réponses. Si vous avez un FrameLayoutélément enfant et souhaitez positionner un élément enfant vers le bas, vous pouvez utiliser android:layout_gravity="bottom"et cela alignera cet enfant au bas du fichier FrameLayout.

Je sais que cela fonctionne parce que je l'utilise. Je sais qu'il est en retard, mais cela pourrait être utile pour les autres, car cela se classe parmi les premières positions sur Google

Lblasa
la source
7
Salut byte1918, si vous considérez que ce n'est pas la bonne réponse à la question, vous êtes plus que bienvenu - et je pense que ce serait utile pour tout le monde - si vous publiez la bonne solution. Ou expliquez au moins ce qui en fait une mauvaise réponse. Merci.
lblasa le
33
Pour aligner en bas à droite, vous pouvez utiliser Android: layout_gravity = "bottom | right"
Marcin Raczkowski
1
s'il ne se reflète pas immédiatement dans l'aperçu, essayez de le définir à partir de l'onglet Conception. fonctionne habituellement,
yUdoDis
J'ai essayé cela avec Textview et cela ne fonctionne pas
The Only Smart Boy
51

J'ai également rencontré cette situation et compris comment le faire en utilisant FrameLayout. La sortie suivante est produite par le code ci-dessous.

Un texte aligné en bas à droite apparaît sur une image à l'aide de FrameLayout.

              <FrameLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" >

                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:src="@drawable/contactbook_icon"
                        android:layout_gravity="center" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="140"
                        android:textSize="12dp"
                        android:textColor="#FFFFFF"
                        android:layout_gravity="bottom|right"
                        android:layout_margin="15dp" />
                </FrameLayout>

Modifiez la valeur de la marge pour ajuster la position du texte sur l'image. La suppression de la marge peut parfois faire sortir le texte de la vue.

JaydeepW
la source
meilleure réponse ... merci, a résolu un mystère de longue date.
YvesLeBorg
38

Il peut être réalisé en utilisant RelativeLayout

<RelativeLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

   <ImageView 
      android:src="@drawable/icon"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      android:layout_alignParentRight="true"
      android:layout_alignParentBottom="true" />

</RelativeLayout>
Rohith Nandakumar
la source
1
Cela ne fonctionne pas, si vous l'utilisez wrap_contentdans RelativeLayout. Parce que de toute façon RelativeLayout mis à l'échelle sur tout l'écran.
Yura Shinkarev
15

Le réglage a android:layout_gravity="bottom|right"fonctionné pour moi

Jakob
la source
9

Deux façons de procéder:

1) Utilisation d'une disposition de cadre

android:layout_gravity="bottom|right"

2) Utilisation d'une disposition relative

android:layout_alignParentRight="true"
android:layout_alignParentBottom="true" 
Jorgesys
la source
5
android:layout_gravity="bottom"
superarts.org
la source
pourquoi nous utilisons la gravité, ce qui est spécifique pour
blackHawk
3

Si vous voulez essayer avec du code java. Voici -

    final LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, 
                                             LayoutParams.WRAP_CONTENT);
    yourView.setLayoutParams(params);
    params.gravity = Gravity.BOTTOM; // set gravity
Rahul
la source
juste ce que je veux. Petit ajout - LayoutParams doit provenir de FrameLayout.LayoutParams. Et si vous le voulez dans le coin inférieur droit, utilisez: params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
SajithK
2

vous pouvez ajouter un TextView invisible au FrameLayout.

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:visibility="invisible"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal">
        <Button
            android:id="@+id/daily_delete_btn"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:text="DELETE"
            android:layout_gravity="center"/>
        <Button
            android:id="@+id/daily_save_btn"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:text="SAVE"
            android:layout_gravity="center"/>
    </LinearLayout>

ximoed
la source
0

Il existe de nombreuses méthodes pour ce faire en utilisant le widget de contrainte de la page activity.xml d'Android Studio.

Les deux méthodes les plus courantes sont:

  1. Sélectionnez votre vue de bouton et ajustez ses marges.
  2. Allez dans "Tous les attributs", puis dans "layout_constraints", puis sélectionnez
    • layout_constraintBottom_toBottomOf_parent
    • layout_constraintRight_toRightOf_parent
Pawananjani Kumar
la source
-3

Vous ne pouvez pas le faire avec FrameLayout.

De la spécification:

http://developer.android.com/reference/android/widget/FrameLayout.html

"FrameLayout est conçu pour bloquer une zone sur l'écran pour afficher un seul élément. Vous pouvez ajouter plusieurs enfants à un FrameLayout, mais tous les enfants sont indexés en haut à gauche de l'écran."

Pourquoi ne pas utiliser RelativeLayout?

Juhani
la source
Je veux qu'une liste soit affichée sur le côté gauche, chevauchant la carte. Oh c'est possible avec RelativeLayout n'est-ce pas? OK merci.
Rohith Nandakumar
1
"mais tous les enfants sont indexés en haut à gauche de l'écran" - pas nécessairement en haut de l'écran, vous pouvez l'aligner à droite, en bas, etc. à droite?
Rohith Nandakumar
Oui, c'est possible avec RelativeLayout. Vous pouvez disposer les vues les unes sur les autres.
Juhani
C'est en fait à moitié correct. Ce que OP demande est réalisable mais avec une vue limitée bien sûr, comme vous l'avez mentionné. Mais dire que ce n'est «pas réalisable» serait faux!
sud007