2012-01-24 38 views
11

我創建了一個SpannableString,其中第一個字符和最後2個比其餘的小。它看起來像這樣:使用SpannableString調整文本對齊方式

sBBBBss 

我想對準小字符,以便它們與大文本的頂部對齊,而不是底(因爲他們出現在這裏)。

這可能嗎?

我想我在尋找這樣的僞代碼:

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

我唯一的另一種選擇是創建一個新的佈局,多個TextViews,我獨立填充,然後對齊,但我請。我認爲這有點麻煩,並且寧願使用SpannableString方法。

回答

28

所以我找到了這個問題的答案張貼在這裏幫助下一個人。

我創建了一個輔助類包含的方法,調整跨度,您可以使用此語法調用它(這是設置的最後2個字符出現就行了更高):

SpannableString contentAmount = new SpannableString(amount); 

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

和輔助類是:

/** 
* 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張貼的答案,幫助社區 – Guillaume

+0

感謝分享 – Rotemmiz

+1

還是剪輯過一個數字或文字的頂部 – JPM