Android: Wyrównaj przycisk do prawego dolnego rogu ekranu za pomocą FrameLayout?

106

Próbuję umieścić elementy sterujące powiększeniem mapy w prawym dolnym rogu ekranu. Mogłem to zrobić za pomocą RelativeLayout, używając obu alignParentBottom="true"i alignParentRight="true", ale w przypadku Framelayout nie znalazłem żadnych takich atrybutów. Jak wyrównać go do prawego dolnego rogu ekranu?

Rohith Nandakumar
źródło

Odpowiedzi:

252

Właściwie jest to możliwe, pomimo tego, co zostało powiedziane w innych odpowiedziach. Jeśli masz FrameLayouti chcesz ustawić element podrzędny na dole, możesz użyć, android:layout_gravity="bottom"a to wyrówna to dziecko do dołu FrameLayout.

Wiem, że to działa, ponieważ go używam. Wiem, że jest późno, ale może się przydać innym, ponieważ zajmuje to czołowe pozycje w Google

lblasa
źródło
7
Cześć, byte1918, jeśli uważasz, że to nie jest właściwa odpowiedź na pytanie, jesteś mile widziany - i myślę, że byłoby to przydatne dla wszystkich - jeśli opublikujesz właściwe rozwiązanie. Lub wyjaśnij przynajmniej, dlaczego jest to błędna odpowiedź. Dzięki.
lblasa
33
Aby wyrównać do prawego dolnego rogu, użyj androida: layout_gravity = "bottom | right"
Marcin Raczkowski
1
jeśli nie odbija się to od razu w podglądzie, spróbuj ustawić to na karcie projektu. zwykle działa,
yUdoDis
Próbowałem tego z Textview i nie działa
The Only Smart Boy
51

Natknąłem się również na tę sytuację i wymyśliłem, jak to zrobić za pomocą FrameLayout. Poniższy wynik jest generowany przez kod podany poniżej.

Nad obrazem przy użyciu FrameLayout wyświetlany jest tekst wyrównany do prawej strony.

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

Zmień wartość marginesu, aby dostosować położenie tekstu na obrazie. Usunięcie marginesu może czasami spowodować, że tekst zniknie z widoku.

Jaydeep W.
źródło
najlepsza odpowiedź ... dzięki, rozwiązałem długo istniejącą zagadkę.
YvesLeBorg
38

Można to osiągnąć za pomocą 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
źródło
1
To nie działa, jeśli używasz wrap_contentw RelativeLayout. Bo i tak RelativeLayout skaluje się na cały ekran.
Yura Shinkarev
15

Ustawienie android:layout_gravity="bottom|right"działało na mnie

Jakob
źródło
9

Można to zrobić na dwa sposoby:

1) Korzystanie z układu ramek

android:layout_gravity="bottom|right"

2) Korzystanie z układu względnego

android:layout_alignParentRight="true"
android:layout_alignParentBottom="true" 
Jorgesys
źródło
5
android:layout_gravity="bottom"
superarts.org
źródło
dlaczego używamy grawitacji, co jest specyficzne
blackHawk
3

Jeśli chcesz spróbować z kodem java. Proszę bardzo -

    final LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, 
                                             LayoutParams.WRAP_CONTENT);
    yourView.setLayoutParams(params);
    params.gravity = Gravity.BOTTOM; // set gravity
Rahul
źródło
właśnie tego chcę. Mały dodatek - LayoutParams powinno pochodzić z FrameLayout.LayoutParams. A jeśli chcesz, w prawym dolnym rogu użyj: params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
SajithK,
2

możesz dodać niewidoczny TextView do 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
źródło
0

Można to zrobić na wiele sposobów za pomocą widżetu ograniczeń na stronie activity.xml w Android Studio.

Dwie najpopularniejsze metody to:

  1. Wybierz widok przycisków i dostosuj jego marginesy.
  2. Przejdź do „Wszystkie atrybuty”, a następnie do „Ograniczenia układu” i wybierz
    • layout_constraintBottom_toBottomOf_parent
    • layout_constraintRight_toRightOf_parent
Pawananjani Kumar
źródło
-3

Nie możesz tego zrobić z FrameLayout.

Ze specyfikacji:

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

„Układ FrameLayout jest przeznaczony do blokowania obszaru na ekranie w celu wyświetlenia pojedynczego elementu. Możesz dodać wiele elementów podrzędnych do układu FrameLayout, ale wszystkie elementy podrzędne są przypięte do lewej górnej części ekranu”.

Dlaczego nie skorzystać z RelativeLayout?

Juhani
źródło
Chcę, aby lista była wyświetlana po lewej stronie, nakładając się na mapę. Och, to jest możliwe z RelativeLayout, prawda? Ok dzięki.
Rohith Nandakumar
1
„ale wszystkie dzieci są przypięte do lewej górnej części ekranu” - niekoniecznie do górnej części ekranu, możesz wyrównać ją do prawej, do dołu itp. do prawej?
Rohith Nandakumar
Tak, jest to możliwe dzięki RelativeLayout. Możesz układać widoki jeden na drugim.
Juhani
To jest właściwie w połowie poprawne. To, o co prosi OP, jest osiągalne, ale oczywiście przy ograniczonym widoku, jak wspomniałeś. Ale stwierdzenie, że jest to „nieosiągalne”, byłoby błędem!
sud007