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

Android: Change vertical position of superscript when using SuperscriptSpan

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

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

这是我的代码:

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

提前致谢!

如果您想更改 SuperscriptSpan 的默认行为,您必须创建自己的自定义子类并重写 updateDrawState() and updateMeasureState().

您可以查看 the source codeSuperscriptSpan 以了解它们目前​​是如何实施的。像这样的东西会使点比你现在看到的更高:

@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);
}