2012-06-05 13 views
11

Próbuję poziomo wyśrodkować kilka widoków w RelativeLayout, która jest podstawą.Centrum grawitacyjne RelativeLayout nie działa

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center_horizontal" 
    android:background="@android:color/transparent" > 

To nie działa. Ustawiłem centerInParent na true dla jednego z widoków i to zadziałało. Jednak nie mogę użyć tego rozwiązania, ponieważ mam dwa widoki obok siebie, które muszą być wyśrodkowane. Próbuję zoptymalizować to, więc chcę uniknąć układów zagnieżdżających, szczególnie liniowych, w swoich wnętrzach.

Czy jest coś oczywistego, czego mi brakuje? Myślałem, że ten atrybut jest stworzony dla tej sytuacji.

Odpowiedz

1

Moja poprawka dotycząca tego problemu jest dostępna tylko w celu wykorzystania złożonej funkcji rysowania w trybie tekstowym. Właśnie wyrzuciłem kosz i użyłem drawableRight, aby pokazać ikonę wyszukiwania.

4

Musisz zagnieździć kilka układów razem. Aby wyśrodkować coś w RelativeLayout, używaj android:layout_centerInParent="true" na dziecku. Jeśli spróbujesz wyśrodkować kilka dzieci, będą one kończyły się pod/nad sobą.

Dlatego na przykład można użyć LinearLayout z dwoma widokami jako dziecko do RelativeLayout, z LinearLayout mającymi android:orientation="horizontal" i android:layout_centerInParent="true". LinearLayout powinien teraz być wyśrodkowany w RelativeLayout, z dwójką dzieci obok siebie.

+1

jestem naprawdę staram się zoptymalizować ten ekran, ponieważ jest to główna aktywność. Dlatego naprawdę staram się unikać zagnieżdżania LinearLayouts. Właściwie to usuwam wszystkie linelayouts z tych aplikacji, ponieważ są one okropnie nieefektywne. –

+3

Cóż, nie można tego zrobić (dobrze wygląda), jeśli nie można zagnieździć układów. Przynajmniej o ile wiem. –

2

Zawiń dwa widoki w LinearLayout, a następnie wyśrodkuj LinearLayout w RelativeLayout, tak jak w przypadku pojedynczego TextView.

+0

Nie chcę zagnieżdżać. I to nadal nie wyjaśnia problemu, który centerInParent działa, gdy jest ustawiony na true, ale nie działa, gdy grawitacja jest ustawiona na center_horizontal –

+0

Wypróbuj 'android: layout_gravity =" center horizontal "' w twoich widokach tekstowych. – Barak

+0

Nie. Dziękuję za odpowiedź, ale to nie zadziała. Potrzebuję dwóch przycisków, aby być obok siebie, tak aby centymetrowy poziom dla każdego był ustawiony jeden na drugim. –

8

Odpowiedziałem na podobny problem dotyczący trzech widoków bez użycia zagnieżdżonych ViewGroups.

https://stackoverflow.com/a/13279846/1011746

ten jest testowany w API 11.

Dla dwóch widoku poziomego przypadku:

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center" 
    android:background="@android:color/black" 
    > 
    <Button 
    android:id="@+id/apply" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:text="APPLY" 
    android:textSize="20sp" 
    /> 
    <Button 
    android:id="@+id/undo" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:text="UNDO" 
    android:textSize="20sp" 
    android:layout_toRightOf="@id/apply" 
    /> 
</RelativeLayout> 

Dla dwóch widok pionowy przypadku:

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center" 
    android:background="@android:color/black" 
    > 
    <Button 
    android:id="@+id/apply" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:text="APPLY" 
    android:textSize="20sp" 
    /> 
    <Button 
    android:id="@+id/undo" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:text="UNDO" 
    android:textSize="20sp" 
    android:layout_below="@id/apply" 
    /> 
</RelativeLayout> 
+0

To rozwiązanie działa tylko wtedy, gdy widoki mogą być układane w jednej linii, jeśli układ jest bardziej złożony, jedynym rozwiązaniem jest użycie układów zagnieżdżonych, jak sugerują inne odpowiedzi lub przyjmują inny apprach. – TheIT