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?

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


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.


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>

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


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" 


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

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>


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

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.