2012-06-05 7 views
11

Ich versuche, mehrere Ansichten in einer RelativeLayout horizontal zu zentrieren, die eine Basis ist.RelativeLayout Gravitationszentrum funktioniert nicht

Dies funktioniert nicht. Ich habe centerInParent zu true für eine der Ansichten gesetzt und das hat funktioniert. Allerdings kann ich diese Lösung nicht verwenden, weil ich zwei Ansichten nebeneinander habe, die zusammen zentriert werden müssen. Ich versuche, dies zu optimieren, also möchte ich vermeiden, dass Layouts, insbesondere lineare, ineinander verschachtelt werden.

Gibt es etwas offensichtlich, dass ich vermisse? Ich dachte dieses Attribut ist für diese Situation gemacht.

Antwort

1

So meine Lösung für dieses Problem, nur um die zusammengesetzte Zeichenfunktion von Textview nutzen. Ich habe den Button einfach überspielt und mit drawableRight das Suchsymbol angezeigt.

4

Sie müssen mehrere Layouts verschachteln. Um etwas in einem RelativeLayout zu zentrieren, verwenden Sie android:layout_centerInParent="true" für das untergeordnete Element. Wenn Sie versuchen, mehrere Kinder zu zentrieren, enden sie unter/über einander.

Daher können Sie beispielsweise ein LinearLayout mit zwei Ansichten als untergeordnetes Objekt für RelativeLayout verwenden, wobei LinearLayout über android:orientation="horizontal" und android:layout_centerInParent="true" verfügt. Das LinearLayout sollte jetzt im RelativeLayout zentriert sein, wobei die zwei untergeordneten Objekte nebeneinander liegen.

+1

Ich bin Ich versuche wirklich, diesen Bildschirm zu optimieren, da es die Hauptaktivität ist. Daher versuche ich wirklich zu vermeiden, LinearLayouts zu verschachteln. Ich entferne tatsächlich alle linearen Layouts von diesen Apps, da sie furchtbar ineffizient sind. –

+3

Nun, es gibt keine Möglichkeit, es zu tun (gut aussehen), wenn Sie Layouts nicht verschachteln können. Zumindest soweit ich weiß. –

2

Wickeln Sie die beiden Ansichten in ein LinearLayout und zentrieren Sie dann das LinearLayout in RelativeLayout wie für das einzelne TextView.

+0

Ich möchte nicht nisten. Und das erklärt immer noch nicht das Problem, dass centerInParent funktioniert, wenn es auf "true" gesetzt ist, aber nicht funktioniert, wenn gravity auf center_horizontal eingestellt ist. –

+0

Probieren Sie 'android: layout_gravity =" centre horizontal "' auf Ihren Textansichten aus. – Barak

+0

Nein. Danke für die Antwort, aber das wird nicht funktionieren. Ich brauche zwei Tasten nebeneinander, so dass center_horizontal für jeden sie übereinander legt. –

8

Ich beantwortete ein ähnliches Problem mit drei Ansichten ohne verschachtelte ViewGroups.

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

Dies ist in API 11.

Für die beiden horizontalen Ansicht Fall geprüft:

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

Für die beiden vertikalen Fall Ansicht:

<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

Diese Lösung funktioniert nur, wenn die Ansichten in einer einzigen Zeile gestapelt werden können, wenn das Layout komplexer ist, die einzige Lösung ist, verschachtelte Layouts zu verwenden, wie die anderen Antworten vorschlagen oder eine andere Aufgabe. – TheIT