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


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>

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


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>

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"

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>

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


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


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


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>

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.

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.