Czy możesz wyśrodkować przycisk w RelativeLayout?

174

Próbuję wyśrodkować przycisk we względnym układzie, czy to możliwe? Wypróbowałem funkcje grawitacji i orientacji, ale nic nie robią.

Arkadia
źródło
1
Język? Struktura? OS?
Arnold Spence
3
@Arnold Spence: pokonałeś mnie o 24 sekundy :)
Nippysaurus
3
Przepraszamy, po raz pierwszy używam Stack Overflow. Tak, tworzę dla Androida. =)
Arcadia
7
Nie ma problemu. Właściwe tagi szybciej zwrócą uwagę właściwych osób. Naprawiono :)
Arnold Spence
8
+1 do Arnolda Spence'a za bycie taktownym. Niektórzy ludzie na SO werbalnie zniszczyliby PO za bycie „nowym”.
Subby

Odpowiedzi:

370

Próbować

android:layout_centerHorizontal="true"

Dokładnie tak, to działa dla mnie:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:background="#ff0000">

    <Button
        android:id="@+id/btn_mybutton"
        android:layout_height="wrap_content"
        android:layout_width="124dip"
        android:layout_marginTop="5dip"
        android:layout_centerHorizontal="true"/>

</RelativeLayout>
ShadowGod
źródło
5
Nie działa, jeśli masz match_parent dla swojej szerokości.
Ghoti
2
Jeśli masz match_parent dla swojej szerokości, jest już wyśrodkowany w poziomie.
ataulm
103

Możesz użyć CENTER_IN_PARENT do względnego układu.

Dodaj android:layout_centerInParent="true"do elementu, który chcesz wyśrodkować w RelativeLayout

Josnidhin
źródło
To centruje w poziomie i w pionie, jak 'bout layout_centerHorizontal = true
user3076750
37

Arcadia, po prostu wypróbuj poniższy kod. Istnieje kilka sposobów uzyskania wyniku, którego szukasz, jest to jeden z łatwiejszych.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relative_layout"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:gravity="center">

    <Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Centered Button"/>
</RelativeLayout>

Ustawienie samej grawitacji RelativeLayout wpłynie na wszystkie obiekty w nim umieszczone. W tym przypadku to tylko przycisk. Możesz oczywiście użyć tutaj dowolnego ustawienia grawitacji (np. Center_hizontal, top, right, itd.).

Możesz również użyć tego kodu poniżej:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relative_layout"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">

    <Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Centered Button"
        android:layout_centerInParent="true"/>
</RelativeLayout>
Kevin Coppock
źródło
1
Dzięki. Jednak gdybym miał wiele przycisków i chciałbym tylko jeden wyśrodkowany, jak bym to zrobił? Pierwszy kod wyśrodkowuje wszystko w układzie relatywnym nadrzędnego. Poza tym, jak mogę wyśrodkować przycisk na górze tego rzędu?
Arcadia,
Po prostu użyj drugiego przykładu i dodaj tylko centerInParent do przycisku, który chcesz wyśrodkować. Możesz również użyć centerHorizontal i layout_alignParentTop, aby wyrównać go do góry i wyśrodkować w poziomie. Co dokładnie próbujesz osiągnąć, mogę podać lepszy przykład.
Kevin Coppock
Ledwo zaczynam studia nad rozwojem Androida i próbuję w pełni zrozumieć, jak manipulować rzeczami, aby robić to, co chcę. Zasadniczo chcę trzymać się z daleka od wyrównywania rzeczy za pomocą pikseli, ponieważ obraz może wyglądać zupełnie inaczej na innym typie ekranu / rozdzielczości. Jednak gdy używasz polecenia grawitacji, wszystko podąża za nim. Próbowałem wyłączyć grawitację dla przycisku za pomocą ignoreGravity i to nie zadziałało. To jest bardzo trudne.
Arcadia,
Tak, zdecydowanie może być. Istnieje wiele sposobów na wykonanie określonego układu. Najlepszym sposobem jest naszkicowanie tego w głowie, jak chcesz, i od tego momentu. Ten krótki samouczek może też pomóc: developer.android.com/resources/tutorials/views/ ...
Kevin Coppock
Tak, właściwie robiłem ten samouczek. Przechodzę przez każdy z samouczków i uczę się, jak w pełni nimi manipulować, w przeciwnym razie nie będę miał pojęcia, jak każdy jest inny.
Arcadia,
25

Streszczony

Dodanie:

android:layout_centerInParent="true"

działa tylko na RelativeLayout, jeśli jeden z następujących atrybutów jest również ustawiony dla widoku:

android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"

który wyrównuje widok podrzędny do widoku nadrzędnego. „Środek” jest oparty na osi wybranego wyrównania:

lewo / prawo -> pionowo

góra / dół -> poziomo

Ustawianie wagi dzieci / treści w widoku:

android:gravity="center"

w każdym przypadku wyśrodkowuje dziecko w widoku macierzystym, jeśli nie ma zestawu wyrównania. Opcjonalnie możesz wybrać:

<!-- Axis to Center -->
android:gravity="center_horizontal"
android:gravity="center_vertical"

<!-- Alignment to set-->
android:gravity="top"
android:gravity="bottom"
android:gravity="left"
android:gravity="right"
android:gravity="fill"
...

Następnie jest:

android:layout_gravity="center"

który skupia sam widok wewnątrz jego rodzica

Wreszcie możesz dodać następujący atrybut do widoku rodziców:

android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
Spektakulatius
źródło
7

Użyj atrybutu android:centerInParent="true"wewnątrz widoku, jeśli chcesz wyśrodkować widok w układzie względnym.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <TextView
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="NWE"
        android:textSize="30dp"/>
</RelativeLayout>
KarthikKPN
źródło
5

To proste, nie dopasowuj go do niczego

<Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_centerInParent="true"
        android:text="Centered Button"/>

Sheychan
źródło
2

Aby wyśrodkować i wyrównać w jednym z kierunków, użyj android: layout_centerHorizontal = "true" lub android: layout_centerVertical = "true" w układzie podrzędnym

karma
źródło
1

Usunięcie wyrównania, takiego jak android: layout_alignParentStart = "true" i dodanie centerInParent zadziałało. Jeśli „align” pozostaje w, centerInParent nie działa

al881
źródło
1

To naprawdę łatwe. Wypróbuj poniższy kod,

<RelativeLayout
    android:id="@+id/second_RL"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/first_RL"
    android:background="@android:color/holo_blue_bright"
    android:gravity="center">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</RelativeLayout>
Primesh
źródło
1
Tylko kod odpowiedzi nie są tutaj mile widziane. Spróbuj zamieścić więcej szczegółów, dlaczego powyższa odpowiedź będzie działać. :)
Vivz
Dzięki za wskazówkę. Jestem tu nowy.
Primesh
0

musisz wyrównać go do lewej lub prawej strony widoku nadrzędnego

nie używaj żadnego z nich podczas korzystania z android:centerInParent="true"kodów: -

android:layout_alignParentLeft="true"

android:layout_alignParentLeft="true"

android:layout_alignRight=""

itp.

Divy sindhu
źródło