14

我创建了一个SpannableString, 第一个字符,最后 2 个小于其余字符。它看起来像这样:

sBBBBss

我想对齐较小的字符,以便它们与较大文本的顶部对齐,而不是底部(如它们出现在这里)。

这可能吗?

我想我正在寻找类似这样的伪代码:

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

我唯一的另一种选择是创建一个具有多个 TextView 的新布局,我独立填充它,并随意对齐。我认为这有点混乱,并且更喜欢使用 SpannableString 方法。

4

1 回答 1

34

所以我找到了这个问题的答案,把它贴在这里来帮助下一个人。

我创建了一个帮助类来包含调整跨度的方法,您可以使用以下语法调用它(这是将最后 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);
    }
}
于 2012-01-29T18:19:53.913 回答