2011-07-11 15 views
19

Mam TextView jak poniżej. Użyłem tego kodu, aby ustawić szary kolor dla części tekstu.Wielokrotne wyrównanie w TextView?

// Prepare result text. 
final String resultText = text + "\n\n" + dictionaryName; 
final SpannableString styledResultText = new SpannableString(resultText); 
styledResultText.setSpan(new ForegroundColorSpan(Color.GRAY), text.length() + 2, text.length() + 2 + dictionaryName.length(), 0); 
resultTextView.setText(styledResultText); 

Teraz chcę ustawić dla niego wyrównanie. Jak zrobić? Android nie ma żadnej klasy span do wyrównania. Nie mogę znaleźć czegoś takiego jak "AlignmentSpan".

Odpowiedz

-5

AFAIK nie jest to możliwe. Naprawdę chciałbym mieć te dwie różne dziedziny. Wygląda na to, że masz oddzielone dane, dlaczego nie po prostu utworzyć osobny tekst dla szarego tekstu (dictionaryName)?

Próbowałem użyć spannables tak mniej jak to możliwe z tego właśnie powodu.

0

Jeśli resultText ma zawsze być wyrównany do prawej, dodaj atrybut gravity = "right" do resultTextView zamiast próbować wyrównać tekst do prawej strony za pomocą stylizowanych ciągów spannable. Zakłada to, że szary tekst znajduje się w oddzielnym widoku tekstowym niż tekst główny.

w XML dla wyniku (szary) tekst:

<TextView android:id="@+id/resultTextView" 
    android:gravity="right" 
    android:layout_width="fill_parent" /> 
+0

Nie, chodzi mi o wyrównanie do czarnego tekstu i wyrównanie szarego tekstu do prawej. Nazywam to "wielokrotnym wyrównaniem". :) – Emerald214

+0

Musisz oddzielić czarny tekst od tekstu wynikowego (mieć 2 oddzielne widoki tekstu). –

49

Choć jej naprawdę późno, by odpowiedzieć, przypuszczam, że to może pomóc komuś przynajmniej. Dodaj to do swojego kodu.

styledResultText.setSpan(new AlignmentSpan.Standard(Alignment.ALIGN_OPPOSITE), 
text.length() + 2, text.length() + 2 + dictionaryName.length(), 
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

Alignment.ALIGN_OPPOSITE jest odpowiednikiem dla prawej stronie.

Alignment.ALIGN_NORMAL jest odpowiednikiem dla lewej strony.

+4

To zdecydowanie powinna być zaakceptowana odpowiedź! Działa to również w przypadku centrowania tekstu przez Alignment.ALIGN_CENTER. – Brandon

+0

Z jakiegoś powodu nie mogę tego uruchomić w moim TextView. Wszystkie linie mają to samo wyrównanie. – Mahm00d

+7

Działa to tylko wtedy, gdy między tekstem wyrównanym do lewej i prawej strony znajduje się co najmniej jeden znak nowego wiersza (\ n). – Reinier

2

Myślę, że powinieneś podzielić tekst na więcej niż jeden ciąg znaków, umieścić je w oddzielnym widoku tekstowym, a następnie wyrównać jeden po drugim.

Mam nadzieję, że to pomoże.