2012-12-19 8 views
6

Ich versuche, einige Text-Layout in Android ein wenig wie float="right" in HTML zu erreichen. Ich habe zwei Texte in einem bestimmten Bereich meines Bildschirms. Ich würde einer von ihnen wie in einem Textview linksbündig werden, und einer von ihnen rechtsbündig werden, wie folgt aus (in dem die | an jedem Ende des umschließenden Containers darstellen): -Make Text float-rechts in Android

| First text item  label | 

So weit das klingt einfach: ich könnte es mit zwei TextView s in einer RelativeLayout, die rechte auf layout_alignParentRight="true" oder layout_gravity="right". Aber es gibt auch den Fall, dass der linke Text zu lang ist, um in den verbleibenden Platz zu passen. Mit einem RelativeLayout wäre es mit dem rechten Text überlappen, aber ich will es in zwei Linien in diesem Fall brechen: -

| This text is way too long | 
|      label | 

und in ähnlicher Weise, wenn der linke Text auf mehrere Zeilen fließt, mag ich die rechten Text auf der gleichen Linie zu passen, wenn möglich: -

| This text doesn't fit on | 
| one line    label | 

Weil View s in Android immer rechteckig sind, scheint es, wie es unmöglich wäre, mit zwei TextView dieses letzte Beispiel Arbeit zu machen s auch wenn ich schrieb eine benutzerdefinierte Layout. Ich schaute in Verwendung eines Spannable, um mich den ganzen Text in einen TextView setzen zu lassen, aber wieder AlignmentSpan ist ein ParagraphStyle, also sieht es nicht wie es aus, wird in der Lage sein, das Etikett auf die selbe Linie wie die Linke zu setzen Text auf diese Weise. Gibt es eine andere Art von Textspanne, die ich verwenden kann, um dies zu erreichen, oder sogar eine völlig andere Methode?

Im Moment sieht es so aus, als müsste ich entweder den Text in HTML setzen und eine WebView verwenden (nicht toll, da die Ansicht in ein Listenelement gehen soll) oder ein benutzerdefiniertes TextView Widget schreiben .

+0

haben Sie eine benutzerdefinierte Ansicht in Betracht gezogen? – toadzky

+0

Wie ich am Ende der Frage sage, ist das meine letzte Zuflucht, aber ich möchte diese Kosten vermeiden, wenn ich kann. –

+0

Wenn Sie jemals den Google I/O Talks von Romain Guy hören, empfiehlt er immer eine benutzerdefinierte Ansicht zu verwenden. es gibt Ihnen eine bessere Leistung und ermöglicht eine Vielzahl von Anpassungen, ohne große Ansichtshierarchien zu erstellen. – toadzky

Antwort

5

Fügen Sie android:gravity="right" (nicht das gleiche wie layout_gravity) auf der rechten Seite hinzu, aber fügen Sie auch android:layout_alignBottom hinzu und beziehen Sie sich auf die ID der anderen Textansicht. Multiline zu True usw. Ich nehme an, Sie haben bereits. Halten Sie die alignParentRight bzw. alignParentLeft.

Um klar zu sein, während sie rechteckig sind, können sie immer noch überlappen, wenn Sie wollen, mit RelativeLayout (oder FrameLayout etc)

Alternative Art und Weise, versuchen Sie dies: Swap android:layout_alignBottom="@id..." mit android:layout_alignParentBottom="true" für die rechts Seite Textansicht .

Erste das dritte Beispiel und das zweite Beispiel zugleich mit einem einfachen RelativeLayout obwohl zu arbeiten, hmm ...

+0

Das scheint nicht so zu sein, als würde es für mein zweites Beispiel funktionieren, wo der linke Text nur auf eine Zeile passt und der rechte Text Geh unter es anstatt auf der rechten Seite. Von dem, was ich von 'RelativeLayout' weiß, scheint es, dass sich der Text in diesem Fall überschneiden wird. Würdest du zustimmen? –

+0

Ah, ich habe hauptsächlich über dein letztes Beispiel nachgedacht. Was passiert, wenn man die 'layout_alignBottom =" @ id ... "' mit 'layout_alignParentBottom =" true "' für die richtige tauscht ... –

+0

Nein, es überlappt sich immer noch. –