2011-10-07 12 views
11

Chcę ustawić margines początkowy tylko dla pierwszego wiersza TextView (nie pierwszy wiersz każdego akapitu)? Użyłem następującego kodu:margines ustawiony na pierwszy wiersz tekstuView

SpannableString s = new SpannableString("this is a test"+"\n"+"this is a test"); 
s.setSpan(new android.text.style.LeadingMarginSpan.Standard(30, 0), 0, s.length(), 0); 
textView .setText(s); 

Tutaj margines początkowy jest ustalany dla wszystkich linii akapitu. Nie chcę tego. Chcę, aby margines początkowy był stosowany tylko dla pierwszego wiersza. Pls help ..

+1

Myślę, że musisz używać tylko białej przestrzeni .. – Hiral

+0

czy jest jakaś inna metoda? – ShineDown

+2

następnie można wziąć dwa oddzielne widoki tekstu: 1 dla pierwszego akapitu i inne dla pozostałych. po prostu ustaw zakres dla pierwszego widoku tekstowego i pozwól innym być takimi, jakimi są. myślę, że nie masz innego wyjścia. – Hiral

Odpowiedz

2

Jak sugerowano tutaj, uważam też, że najlepszym rozwiązaniem jest po prostu dodać kilka spacji na początku. Jeśli potrzebujesz tylko marginesu na pierwszej linii TextView, nie widzę powodu, dla którego musiałbyś zrobić coś naprawdę zaawansowanego.

Jeśli trzeba zmienić lub użyj tekst w TextView na późniejszym etapie, można po prostu użyć metody substring() dostać jedynie część napisu, tj s.substring(2, s.length());

Nie jest to idealne rozwiązanie, ale Myślę, że to zrobi.

+0

Problem polega na tym, że różnice w parametrach wymagają podania długości interfejsu użytkownika (np. "M" wymaga więcej długości niż "i"), a długość spacji nie jest równa długości wszystkich znaków. –

5

Rzeczywiście już odpowiedziałeś na własne pytanie.
Wszystko, co musisz zrobić, to ustawić długość span na 1 zamiast s.length().

if (s.lenght() > 0) { 
    s.setSpan(new android.text.style.LeadingMarginSpan.Standard(30, 0), 0, 1, 0); 
} 

W ten sposób margines zostanie zastosowany tylko do pierwszego akapitu.

Powiązane problemy