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.