Android:使用SuperscriptSpan时更改上标的垂直位置

时间:2019-03-25 13:38:50

标签: android spannablestring

在我的应用中,我试图使用SuperscriptSpan来显示一个点。但是我想相对于顶部更改该点的边距,最好是0。这就是结果的样子。

我希望该点与textView的顶部对齐,而现在它位于中间的某个位置。

enter image description here

这是我的代码:

    SpannableStringBuilder cs = new SpannableStringBuilder("MyText.");
    cs.setSpan(new SuperscriptSpan(), 6, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

谢谢!

1 个答案:

答案 0 :(得分:1)

如果要更改SuperscriptSpan的默认行为,则必须为其创建自己的自定义子类,并覆盖updateDrawState()updateMeasureState()

您可以在SuperscriptSpan的{​​{3}}中查看它们的当前实现方式。这样的事情会将点推高到您现在所看到的位置:

@Override
public void updateDrawState(@NonNull TextPaint textPaint) {
    textPaint.baselineShift += (int) ((2 * textPaint.ascent()) / 3);
}

@Override
public void updateMeasureState(@NonNull TextPaint textPaint) {
    textPaint.baselineShift += (int) ((2 * textPaint.ascent()) / 3);
}