Установка нижнего и верхнего индекса для конкретного символа в TextView?

Есть ли способ установить индекс и верхний индекс для конкретного символа в TextView? Я хочу отобразить текст, который выглядит следующим образом:

Итак, я попробовал этот код:

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

Но результат таков:

Вы можете видеть, что верхний индекс появляется после индекса. Как я могу решить эту проблему? Могу ли я решить ее с помощью SpannableString? Или я могу изменить положение индекса?

1 ответ

Решение

Этот пользовательский диапазон может помочь вам понять основную идею:

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);
    }
}
Другие вопросы по тегам