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?

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


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.


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>

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


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" 


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

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>


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

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.