2013-03-12 20 views
8

Sto cercando una visualizzazione di testo che assomigli a enter image description here. Ho usato qui di seguito il codice per l'attuazione del presente ..Due stili diversi in una singola visualizzazione di testo con gravità e altezza differenti

SpannableString text; 
    text = new SpannableString(bal_dollars.getText()); 
    int index = bal_dollars.getText().toString().indexOf("."); 
    text.setSpan(new TextAppearanceSpan(getApplicationContext(), 
      R.style.HeroGraphicBalanceSmallFont), index, bal_dollars 
      .getText().toString().length(), 
      Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    bal_dollars.setText(text, TextView.BufferType.SPANNABLE); 

qui è lo stile utilizzato nel giro ..

<style name="HeroGraphicBalanceSmallFont" parent="@android:style/TextAppearance.Medium"> 
    <item name="android:layout_width">wrap_content</item> 
    <item name="android:textSize">50sp</item> 
    <item name="android:singleLine">true</item> 
    <item name="android:layout_height">match_parent</item> 
    <item name="android:layout_gravity">top|right</item> 
    <item name="android:paddingBottom">30dp</item> 
    <item name="android:gravity">top|right</item> 
    <item name="android:textColor">@color/status_text</item> 
    <item name="customFont">fonts/HeroicCondensedMedium.ttf</item> 
</style> 

tutto sembra bene, tranne la spaziatura dello span mirata di una parte di testo cioè decimale gravità .. enter image description here. Ho provato tutti gli attributi xml. Si prega di aiutare

+2

vorrei esaminare l'attributo 'baselineShift' di' TextPaint'. – kcoppock

+1

grazie a @kcoppock, ho scavato di più nell'estendere la classe 'MetricAffectingSpan' e modificare l'attributo' baselineshift'. Ha funzionato come un fascino :) – CodeFury

+2

1.5 anni troppo tardi .. ma non [SuperscriptSpan] (http://developer.android.com/reference/android/text/style/SuperscriptSpan.html) funziona per questo? – andyandy

risposta

11

Ho rotto. Sto postando questo perché potrebbe essere utile per gli altri e grazie a @kcoppock per il suggerimento. Ho esteso la classe MetricAffectingSpan che influisce sulla formattazione del testo a livello di caratteri in un modo che modifica la larghezza o l'altezza dei caratteri estendendola.

public class CustomCharacterSpan extends MetricAffectingSpan { 
double ratio = 0.5; 

public CustomCharacterSpan() { 
} 

public CustomCharacterSpan(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); 
}} 

uso questo per aggiornare il testo nel vostro punto di vista ..

String string = tv.getText().toString(); 
    SpannableString text = new SpannableString(tv.getText()); 
    int index = tv.getText().toString().indexOf("."); 
    text.setSpan(new CustomCharacterSpan(), index, string.length(), 
      SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);//u can use ur own ratio using another constructor 
    tv.setText(text, TextView.BufferType.SPANNABLE); 
Problemi correlati