2012-12-19 21 views
6

Próbuję uzyskać układ tekstu w Androidzie trochę jak float="right" w HTML. Mam dwa elementy tekstu, które można umieścić w określonym obszarze ekranu. Chciałbym jednego z nich, aby być wyrównany do lewej w TextView, a jeden z nich, aby być wyrównany do prawej, tak (gdzie | na obu końcach reprezentują pojemnik otaczającą): -Ulepsz tekst w Androidzie

| First text item  label | 

Tak daleko to brzmi łatwo: mogłem to zrobić z dwoma TextView s w RelativeLayout, prawy zestaw na layout_alignParentRight="true" lub layout_gravity="right". Ale jest też przypadek, w którym lewy tekst jest zbyt długi, aby zmieścić się w pozostałej przestrzeni. Z RelativeLayout to nakładają się na tekst po prawej stronie, ale chcę, żeby włamać się do dwóch liniach w tym przypadku: -

| This text is way too long | 
|      label | 

i podobnie, jeśli tekst lewa przepływa na wielu liniach, chcę tekst po prawej stronie, aby zmieścić się na tej samej linii, jeśli to możliwe: -

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

Ponieważ View s w Androidzie są zawsze prostokątne, wydaje się, że byłoby to niemożliwe, aby ten ostatni przykład pracę z dwoma TextView s nawet ja napisał niestandardowy Layout. Przyjrzałem się używaniu Spannable, aby pozwolić mi umieścić cały tekst w jednym TextView, ale znowu, AlignmentSpan jest ParagraphStyle, więc nie wygląda na to, że będzie w stanie umieścić etykietę na tej samej linii, co lewa ręka tekst w ten sposób. Czy jest jakiś inny zakres tekstowy, który mogę wykorzystać do osiągnięcia tego, czy nawet zupełnie inną metodę?

W tej chwili wygląda na to, że będę musiał umieścić tekst w HTML i użyć WebView (niezbyt dobrze, ponieważ widok ma przejść do elementu listy) lub napisać niestandardowy widget podobny do TextView .

+0

czy za widok niestandardowy? – toadzky

+0

Jak mówię na koniec pytania, to moja ostatnia deska ratunku, ale chciałbym tego uniknąć, jeśli mogę. –

+0

, jeśli kiedykolwiek będziesz słuchać rozmów Google/I przez romaina, zawsze zaleca używanie niestandardowego widoku. daje lepszą wydajność i pozwala na wiele dostosowań bez tworzenia dużych hierarchii widoków. – toadzky

Odpowiedz

5

Dodaj android:gravity="right" (nie to samo co layout_gravity) na prawo, ale również dodaj android:layout_alignBottom i odwołaj się do id drugiego widoku tekstowego. multiline na true itd. Zakładam, że już masz. Zachowaj odpowiednio: alignParentRight i alignParentLeft.

Żeby było jasne, gdy są prostokątne wciąż mogą się pokrywać, jeśli chcesz, używając RelativeLayout (lub FrameLayout etc)

alternatywny sposób, spróbuj tego: zamianę android:layout_alignBottom="@id..." z android:layout_alignParentBottom="true" dla widoku tekstowego prawo bocznej .

Pierwsze trzeci przykład i drugi przykład do pracy w tym samym czasie, choć z prostym RelativeLayout, hmm ...

+0

Nie wygląda na to, że zadziała w moim drugim przykładzie, gdzie tekst po lewej stronie pasuje do linii, a tekst po prawej stronie przejdź pod nim zamiast po prawej stronie. Z tego, co wiem o "RelativeLayout", wydaje się, że tekst będzie się w tym przypadku nakładał. Zgodziłbyś się? –

+0

Ach, myślałem głównie o twoim ostatnim przykładzie. Co się stanie, jeśli zamienisz 'layout_alignBottom =" @ id ... "' z 'layout_alignParentBottom =" true "' na prawą, a następnie ... –

+0

Nie, to nadal się pokrywa. –

Powiązane problemy