2012-01-24 16 views
11

He creado un SpannableString, con el primer carácter y los últimos 2 más pequeños que el resto. Se ve así:Ajuste de la alineación de texto utilizando SpannableString

sBBBBss 

me gustaría alinear los caracteres más pequeños para que estén alineados con la parte superior del texto más grande, en lugar de la parte inferior (tal y como aparecen aquí).

¿Esto es posible?

supongo que estoy buscando algo como esto pseudo-código:

myAmount.setSpan (nueva RelativeAlignSpan (View.TOP), 0, 1, 0);

Mi única otra alternativa es crear un nuevo diseño, con múltiples TextViews, que llene de forma independiente, y alinear como yo quiera. Creo que esto es un poco complicado, y preferiría usar el enfoque SpannableString.

Respuesta

28

Así que encontré la respuesta a esta pregunta escribiéndola aquí para ayudar al siguiente tipo.

he creado una clase de ayuda a contener los métodos para ajustar el Span, se puede llamar así, con esta sintaxis (esto es establecer los 2 últimos caracteres para aparecer más arriba en la línea):

SpannableString contentAmount = new SpannableString(amount); 

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

y la clase de ayuda es:

/** 
* 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); 
    } 
} 
+1

+1 por publicar una respuesta para ayudar a la comunidad – Guillaume

+0

Gracias por compartir – Rotemmiz

+1

Aún clips de la parte superior de un número o texto – JPM