2012-12-19 14 views
6

Ich habe eine RelativeLayout (die ich nicht verheiratet bin) und zwei TextView s. Ich möchte, dass die Unterseite der ersten TextView mit der Mitte der Eltern, und die Spitze der zweiten TextView mit der Mitte des Elternteils ausrichten.Wie kann ich zwei TextViews vertikal in einem Layout zentrieren

enter image description here

habe ich eine grüne Linie im Bild oben auf den (vertikalen) Mitteln der Mutter. Die TextView s sind derzeit genau an der richtigen Stelle, aber ich tat dies, wie ich unten mit Margen beschreiben werde und sie an die Eltern ausrichten und die Größe der Eltern kennen.

Aus verschiedenen Gründen kann ich nicht nur eine TextView verwenden und sie zentrieren. Ich kenne auch nicht die Höhe des Elternteils, also kann ich nicht jedes am oberen/unteren Ende des Elternteils ausrichten und sie nach unten/oben ausrichten, um sie zu zentrieren.

Ich habe versucht, auch eine andere View mit, der die Höhe Hälfte einnimmt und invisible, aber layout_height nicht statt Prozente (oder zumindest es gab mir Fehler).

Irgendwelche Ideen, wie ich das erreichen kann?

Sollte ich nur die beiden TextView s in ein anderes Layout setzen und dieses Zentrum selbst zentrieren?

+0

https://stackoverflow.com/questions/22161456/vertically-centtering-two-textviews-in-a-relativayout/48880191#48880191 – blackHawk

Antwort

19

Erstellen Sie eine 0-Height-Ansicht, die in ihrem übergeordneten Element zentriert ist und als Anker dient. (Verwenden Sie dazu das Attribut android:layout_centerVertical="true".) Positionieren Sie eine Textansicht über dem Anker und die andere unter dem Anker.

+0

Brilliant, 0 Höhe, statt 50% ... Sehr schlau. Danke – xbakesx

+0

sehe meine Antwort keine Notwendigkeit, neue Textansicht zu erstellen https://stackoverflow.com/questions/22161456/vertically-centtering-two-textviews-in-a-relativayout/48880191#48880191 – blackHawk

+0

@blackHawk - True, ich erstelle eine neue Sichtweise, aber über welche neue Textansicht sprichst du? Auch die von Ihnen gepostete Lösung wird hier nicht funktionieren, da, wie OP in der Frage gezeigt hat, die Höhe des Elternteils zum Zeitpunkt des Codierens nicht bekannt ist. Daher ist es unmöglich zu wissen, welche Ränder zu verwenden sind, um die richtige vertikale Zentrierung zu erhalten. –

2

Ich habe dieses Problem zuvor gelöst, indem ich ein vertikales LinearLayout mit den beiden TextViews verwendet habe.

ps .: Die Android Design Guidelines weist speziell auf Don't use right-pointing carets on line items. Es handelt sich möglicherweise nicht um eine Werbebuchung, die Sie tun, aber falls dies der Fall ist, nur um darauf hinzuweisen.

+0

Danke, das wird total funktionieren. Ich bin mir nicht sicher, was schlimmer ist, wenn ich eine leere Ansicht als Anker hinzufüge oder mehr Layouts darin einlege ... Auch den Kommentar zu den Carets zu schätzen. Ich habe das letzte Woche in ihren Designrichtlinien bemerkt. – xbakesx

+0

Ignorieren des Kommentars re. Caret-Verwendung, wie wurde das Problem der Zentrierung der textViews im LL tatsächlich gelöst? – greg7gkb

+0

@ greg7gkb - Die LL-Höhe wird auf 'wrap_content' gesetzt und der LL wird dann vertikal im übergeordneten' RelativeLayout' zentriert. Dadurch wird der Mittelpunkt des Blocks aus zwei TextViews anstatt der Grundlinie ausgerichtet. Es ist die Option, die OP in der letzten Zeile der Frage vorgeschlagen hatte. –

Verwandte Themen