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?

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


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.


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>

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


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" 


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

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>


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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.