2013-03-12 8 views
8

Ich bin auf der Suche nach einer Textansicht, die wie enter image description here aussieht. Ich habe unten Code für die Umsetzung benutzten ..Zwei verschiedene Stile in einem Textview mit unterschiedlicher Schwerkraft und Höhe

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); 

hier der Stil in der Spanne verwendet wird ..

<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> 

sieht alles außer dem Abstand der Zielspanne von Text dh Dezimalteil Fein Schwerkraft .. enter image description here. Ich habe alle xml-Attribute ausprobiert. Bitte helfen Sie

+2

Ich würde schauen in die 'baselineShift' Attribut' TextPaint'. – kcoppock

+1

danke @kcoppock, ich habe mehr in erweitert "MetricAffectingSpan" -Klasse und Ändern der "Baselineshift" Attribut gegraben. Es funktionierte wie ein Charme :) – CodeFury

+2

1,5 Jahre zu spät .. aber funktioniert [SuperscriptSpan] (http://developer.android.com/reference/android/text/style/SuperscriptSpan.html) dafür nicht? – andyandy

Antwort

11

Ich knackte es. Ich poste dies, da es für andere hilfreich sein könnte und danke an @kcoppock für den Hinweis. Ich habe die Klasse MetricAffectingSpan erweitert, die die Textformatierung auf Zeichenebene so beeinflusst, dass die Breite oder Höhe der Zeichen diese Klasse erweitert.

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); 
}} 

Verwendung dieser den Text in Ihre Ansichten zu aktualisieren ..

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); 
Verwandte Themen