Android: Schaltfläche mit FrameLayout unten rechts auf dem Bildschirm ausrichten?

106

Ich versuche, die Zoomsteuerung der Karte in der unteren rechten Ecke des Bildschirms zu platzieren. Ich konnte es mit RelativeLayout mit beiden alignParentBottom="true"und machen alignParentRight="true", aber mit Framelayout habe ich keine solchen Attribute gefunden. Wie richte ich es unten rechts auf dem Bildschirm aus?

Rohith Nandakumar
quelle

Antworten:

252

Eigentlich ist es möglich, trotz der Aussagen in anderen Antworten. Wenn Sie ein FrameLayouthaben und ein untergeordnetes Element unten positionieren möchten, können Sie es verwenden, android:layout_gravity="bottom"und das wird das untergeordnete Element unten am ausrichten FrameLayout.

Ich weiß, dass es funktioniert, weil ich es benutze. Ich weiß, dass es spät ist, aber es könnte für andere nützlich sein, da dies bei Google an der Spitze steht

lblasa
quelle
7
Hallo byte1918, wenn Sie der Meinung sind, dass dies nicht die richtige Antwort auf die Frage ist, sind Sie herzlich willkommen - und ich denke, es wäre für alle nützlich -, wenn Sie die richtige Lösung veröffentlichen. Oder erklären Sie zumindest, was dies zu einer falschen Antwort macht. Vielen Dank.
lblasa
33
Um rechts unten auszurichten, können Sie android verwenden: layout_gravity = "bottom | right"
Marcin Raczkowski
1
Wenn es nicht sofort in der Vorschau angezeigt wird, versuchen Sie es auf der Registerkarte "Design" festzulegen. funktioniert normalerweise,
yUdoDis
Ich habe das mit Textview versucht und es funktioniert nicht
The Only Smart Boy
51

Ich bin auch auf diese Situation gestoßen und habe herausgefunden, wie es mit FrameLayout geht. Die folgende Ausgabe wird mit dem unten angegebenen Code erzeugt.

Mit FrameLayout wird rechts unten ausgerichteter Text über einem Bild angezeigt.

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

Ändern Sie den Randwert, um die Textposition über dem Bild anzupassen. Durch Entfernen des Randes wird der Text manchmal aus der Ansicht entfernt.

JaydeepW
quelle
beste Antwort ... danke, löste ein langjähriges Rätsel.
YvesLeBorg
38

Es kann mit erreicht werden 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
quelle
1
Dies funktioniert nicht, wenn wrap_contentin verwendet RelativeLayout. Denn dann ist RelativeLayout dann sowieso auf dem ganzen Bildschirm skaliert.
Yura Shinkarev
15

Die Einstellung android:layout_gravity="bottom|right"hat bei mir funktioniert

Jakob
quelle
9

Zwei Möglichkeiten, dies zu tun:

1) Verwenden eines Rahmenlayouts

android:layout_gravity="bottom|right"

2) Verwenden eines relativen Layouts

android:layout_alignParentRight="true"
android:layout_alignParentBottom="true" 
Jorgesys
quelle
5
android:layout_gravity="bottom"
superarts.org
quelle
warum wir die Schwerkraft verwenden, wofür ist spezifisch
blackHawk
3

Wenn Sie es mit Java-Code versuchen möchten. Bitte schön -

    final LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, 
                                             LayoutParams.WRAP_CONTENT);
    yourView.setLayoutParams(params);
    params.gravity = Gravity.BOTTOM; // set gravity
Rahul
quelle
genau das, was ich will. Kleine Ergänzung - LayoutParams sollten von FrameLayout.LayoutParams stammen. Und wenn Sie es unten rechts wollen, verwenden Sie: params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
SajithK
2

Sie können dem FrameLayout eine unsichtbare Textansicht hinzufügen.

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

Es gibt viele Methoden, um dies mithilfe des Einschränkungs-Widgets auf der Seite activity.xml von Android Studio zu tun.

Zwei häufigste Methoden sind:

  1. Wählen Sie Ihre Schaltflächenansicht aus und passen Sie die Ränder an.
  2. Gehen Sie zu "Alle Attribute", dann zu "layout_constraints" und wählen Sie
    • layout_constraintBottom_toBottomOf_parent
    • layout_constraintRight_toRightOf_parent
Pawananjani Kumar
quelle
-3

Mit FrameLayout ist das nicht möglich.

Aus Spezifikation:

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

"FrameLayout wurde entwickelt, um einen Bereich auf dem Bildschirm für die Anzeige eines einzelnen Elements auszublenden. Sie können einem FrameLayout mehrere untergeordnete Elemente hinzufügen, aber alle untergeordneten Elemente sind oben links auf dem Bildschirm festgelegt."

Warum nicht RelativeLayout verwenden?

Juhani
quelle
Ich möchte, dass auf der linken Seite eine Liste angezeigt wird, die die Karte überlappt. Oh, das ist mit RelativeLayout möglich, nicht wahr? OK danke.
Rohith Nandakumar
1
"aber alle Kinder sind oben links auf dem Bildschirm fixiert" - nicht unbedingt oben auf dem Bildschirm, Sie können ihn nach rechts, unten usw. ausrichten, oder?
Rohith Nandakumar
Ja, das ist mit RelativeLayout möglich. Sie können Ansichten übereinander anordnen.
Juhani
Das ist eigentlich halb richtig. Was OP verlangt, ist erreichbar, aber mit eingeschränkter Sicht natürlich, wie Sie erwähnt haben. Aber zu sagen, dass dies "nicht erreichbar" ist, wäre falsch!
Sud007