2009-09-30 18 views

Odpowiedz

27

można zastosować centrowania na dowolnym widoku, w tym układ, za pomocą XML atrybut android:. Layout_gravity”. Prawdopodobnie chcesz, aby nadać mu wartość«center»

Można znaleźć odniesienie możliwe wartości dla tej opcji tutaj: http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html#attr_android:layout_gravity

+2

AFAIK, layout_gravity jest tylko dla LinearLayout, nie dla dowolnych układach. – CommonsWare

+0

Jak wspomniałeś layout_gravity jest tylko dla LinearLayout co z RelativeLayout ponieważ ponieważ w aplikacji chcę osadzić textview na ImageView – Vicky

+0

wypróbowałem go również z relativelayout i moim zdaniem działa – ludwigm

131

Krok # 1: Wrap cokolwiek to jest chcesz na środku ekranu w pełnym ekranie RelativeLayout

Krok 2:. Daj ten pogląd dziecko (ten, który chcesz centrowany wewnątrz RelativeLayout)Atrybut.

+19

To zadziałało tylko dla mnie, gdy umieściłem atrybut android: layout_centerInParent = "true" w widoku wewnątrz RelativeLayout. –

+1

Co zrobić, jeśli chcę ustawić go na środku, ale przesunąć w dół, jeśli istnieje niebezpieczeństwo nałożenia się na inny widok? –

+3

Musisz umieścić 'android: layout_centerInParent =" true "' na widoku podrzędnym, a nie na "RelativeLayout". Atrybuty 'android: layout_ *' wpływają na sposób umieszczania i wymiarowania widoku w jego strukturze macierzystej, a nie na sposobie umieszczania i wymiarowania widoku w nim. – Karu

17
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/relLayout1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center"> 
    <ProgressBar 
     android:id="@+id/ProgressBar01" 
     android:layout_centerInParent="true" 
     android:layout_width="wrap_content" 
     android:layout_gravity="center" 
     android:layout_height="wrap_content"></ProgressBar> 
    <TextView 
     android:layout_below="@id/ProgressBar01" 
     android:text="@string/please_wait_authenticating" 
     android:id="@+id/txtText" 
     android:paddingTop="30px" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"></TextView> 
</RelativeLayout> 
6

Jeśli chcesz wyśrodkować jeden widok, użyj tego. W tym przypadku TextView musi być najniższym widokiem w twoim XML, ponieważ jego layout_height to match_parent.

<TextView 
    android:id="@+id/tv_to_be_centered" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:gravity="center" 
    android:text="Some text" 
/> 
+0

Miał na myśli umieszczenie układu na środku, a nie widok. –

+1

@IgorG. pozycjonowanie układu i widoku są takie same, ponieważ układ * to widok *. – FoamyGuy

+0

@Tim Myślałem, że układ jest bardziej jak ViewGroup niż widok ... –

14

udało mi się wyśrodkować widok używając

android:layout_centerHorizontal="true" 

i

android:layout_centerVertical="true" 

params.

+2

Należy zauważyć, że te atrybuty działają tylko wtedy, gdy dany widok jest (bezpośrednio) wewnątrz 'RelativeLayout'. – Karu

+0

to jest dokładnie to, czego potrzebowałem! Dzięki – joshmmo

0

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

0

Będzie pracować dla tego kodu czasami potrzebują zarówno właściwości

android:layout_gravity="center" 
android:layout_centerHorizontal="true" 
1

Updated odpowiedź: Constraint Layout

Wygląda na to, że trend w systemie Android polega obecnie na zastosowaniu układu ograniczeń. Chociaż jest to dość proste, aby wyśrodkować widok za pomocą RelativeLayout (jak pokazały inne odpowiedzi), ConstraintLayout jest silniejszy niż RelativeLayout dla bardziej złożonych układów. Warto więc dowiedzieć się, jak to zrobić teraz.

Aby wycentrować widok, przeciągnij uchwyty na wszystkie cztery strony rodzica.

enter image description here

Powiązane problemy