如何在TextView中设置特定字符的下标和上标?

5
有没有一种方法可以在TextView中为特定字符设置下标和上标?我想显示像这样的文本:

enter image description here

所以,我尝试了这段代码:

TextView tv1 = ... ;
String latex = "\u222E";
tv1.setText(Html.fromHtml(latex + "<sup>200</sup><sub>2</sub> f(x)dx"));

但结果是这样的:

enter image description here

您可以看到上标出现在下标后面。我该如何解决这个问题?我能用SpannableString来解决吗?或者我可以改变下标的位置吗?

我不确定,但你可能可以用SubscriptSpan和SuperscriptSpan来解决这个问题。<br> 请阅读这篇文章并尝试。无论如何,它都会很有用。 - x90
通过扩展 ReplacementSpan 创建您自己的 Span。 - pskink
@pskink,你能否更详细地解释一下或者给我一些链接帮助我了解如何做到这一点?谢谢。 - hasanghaforian
1个回答

2
这个自定义跨度可以帮助你理解基本思想:
class SupSubSpan extends ReplacementSpan {
    private String sup;
    private String sub;

    public SupSubSpan(String sup, String sub) {
        this.sup = sup;
        this.sub = sub;
    }

    @Override
    public int getSize(Paint paint, CharSequence text, int start, int end, FontMetricsInt fm) {
        return (int) Math.max(paint.measureText(sup), paint.measureText(sub));
    }

    @Override
    public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
        canvas.drawText(sup, x, y + paint.ascent() / 2, paint);
        canvas.drawText(sub, x, y - paint.ascent() / 2, paint);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接