2012-01-24 9 views
11

Utworzyłem SpannableString, z pierwszym znakiem, a ostatnie 2 mniejszym niż pozostałe. Wygląda to tak:Dostosowywanie wyrównania tekstu za pomocą SpannableString

sBBBBss 

Chciałbym wyrównać mniejsze postacie są więc wyrównane z góry większego tekstu, zamiast na dole (jak pojawiają się one tutaj).

Czy to możliwe?

Chyba szukam czegoś jak ten pseudo-kod:

myAmount.setSpan (nowa RelativeAlignSpan (View.TOP), 0, 1, 0);

Moja jedyna alternatywa to stworzenie nowego układu z wieloma widokami tekstu, które zapełniam niezależnie i wyrównuję, ale proszę. Myślę, że to jest trochę nieporządne i wolałbym użyć podejścia SpannableString.

Odpowiedz

28

Więc znalazłem odpowiedź na to pytanie, umieszczając ją tutaj, aby pomóc następnemu facetowi.

Stworzyłem klasę pomocnika zawierać metody, aby dostosować rozpiętości, można nazwać to za pomocą tej składni (jest to ustawienie ostatnie 2 znaki pojawiają się wyżej na linii):

SpannableString contentAmount = new SpannableString(amount); 

contentAmount.setSpan(new SuperscriptSpanAdjuster(3.0/5.0), contentAmount.length() - 2, contentAmount.length(), SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE); 

a klasa pomocnika jest:

/** 
* This is a helper class to help adjust the alignment of a section of text, when using SpannableStrings to set text 
* formatting dynamically. 
* 
*/ 
import android.text.TextPaint; 
import android.text.style.MetricAffectingSpan; 

public class SuperscriptSpanAdjuster extends MetricAffectingSpan { 
    double ratio = 0.5; 

    public SuperscriptSpanAdjuster() { 
    } 

    public SuperscriptSpanAdjuster(double ratio) { 
     this.ratio = ratio; 
    } 

    @Override 
    public void updateDrawState(TextPaint paint) { 
     paint.baselineShift += (int) (paint.ascent() * ratio); 
    } 

    @Override 
    public void updateMeasureState(TextPaint paint) { 
     paint.baselineShift += (int) (paint.ascent() * ratio); 
    } 
} 
+1

+1 do wysyłania odpowiedzi, aby pomóc Wspólnocie – Guillaume

+0

Thanks for sharing – Rotemmiz

+1

Wciąż klipy off szczycie numer lub tekst – JPM