Настройка выравнивания текста с использованием SpannableString

Я создал SpannableString с первым символом, а второй меньше, чем остальные. Это выглядит так:

 sBBBBss 

Я хотел бы выровнять меньшие символы, чтобы они были выровнены с верхней частью большего текста, а не снизу (как они появляются здесь).

Это возможно?

Думаю, я ищу что-то вроде этого псевдокода:

MyAmount.setSpan (новый RelativeAlignSpan (View.TOP) , 0, 1, 0);

Моя единственная альтернатива – создать новый макет с несколькими TextViews, который я заполняю независимо, и выравниваю, тем не менее, пожалуйста. Я думаю, что это довольно грязно, и предпочли бы использовать подход SpannableString.

Поэтому я нашел ответ на этот вопрос, разместив его здесь, чтобы помочь следующему парню.

Я создал вспомогательный класс, чтобы содержать методы для настройки Span, вы можете вызвать его с помощью этого синтаксиса (это означает, что последние 2 символа появляются выше в строке):

 SpannableString contentAmount = new SpannableString(amount); contentAmount.setSpan(new SuperscriptSpanAdjuster(3.0/5.0), contentAmount.length() - 2, contentAmount.length(), SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE); 

И вспомогательный класс:

 /** * This is a helper class to help adjust the alignment of a section of text, when using SpannableStrings to set text * formatting dynamically. * */ import android.text.TextPaint; import android.text.style.MetricAffectingSpan; public class SuperscriptSpanAdjuster extends MetricAffectingSpan { double ratio = 0.5; public SuperscriptSpanAdjuster() { } public SuperscriptSpanAdjuster(double ratio) { this.ratio = ratio; } @Override public void updateDrawState(TextPaint paint) { paint.baselineShift += (int) (paint.ascent() * ratio); } @Override public void updateMeasureState(TextPaint paint) { paint.baselineShift += (int) (paint.ascent() * ratio); } }