6

我可以缩小最后 2 个数字,但我希望它们显示在顶部,如下图所示。

TextView TV = (TextView)findViewById(R.id.txt);

Spannable WordtoSpan = new SpannableString("13.500,27");        

WordtoSpan.setSpan( new TextAppearanceSpan(null, 0, 12, null, null), WordtoSpan.length()-2, WordtoSpan.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
TV.setText(WordtoSpan);

谢谢塔哈

在此处输入图像描述

4

1 回答 1

4

编辑:

您可以使用SuperscriptSpan()

Spannable WordtoSpan = new SpannableString("13.500,27");        
WordtoSpan.setSpan( new TextAppearanceSpan(null, 0, 17, null, null), WordtoSpan.length()-2, WordtoSpan.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
WordtoSpan.setSpan( new SuperscriptSpan(), WordtoSpan.length()-2, WordtoSpan.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  

加大字体大小看效果

在此处输入图像描述


试试这个我没有找到任何其他方法,而是将上标文本附加到原始 spannalbe 字符串

为 SpannableStringBuilder 应用任何你想要的 Spans

  SpannableStringBuilder builder=new SpannableStringBuilder("13.500,");
  builder.append(Html.fromHtml("X<sup>27</sup>"))

编辑 2

如果您像下面这样创建自定义跨度,它会将超文本绝对对齐到顶部。但是如果你使用默认的 SuperscriptSpan ,它不能使文本对齐到顶部。

public class SuperscriptSpan2 extends MetricAffectingSpan implements
            ParcelableSpan {
        public SuperscriptSpan2() {
        }

    public int getSpanTypeId() {
        return TextUtils.CAP_MODE_CHARACTERS;
    }

    public int describeContents() {
        return 0;
    }

    public void writeToParcel(Parcel dest, int flags) {
    }

    @Override
    public void updateDrawState(TextPaint tp) {
        tp.baselineShift += (int) (tp.ascent() / 1.25);
    }

    @Override
    public void updateMeasureState(TextPaint tp) {
        tp.baselineShift += (int) (tp.ascent() / 1.25);
    }
}
于 2013-05-17T12:27:22.213 回答