2013-03-12 4 views
8

Я ищу текстовое изображение, которое выглядит как enter image description here. Я использовал ниже код для реализации этого ..Два разных стиля в одном текстовом режиме с разной степенью тяжести и высотой

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

здесь стиль использован в пролете ..

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

все выглядит отлично, за исключением расстояния целевого промежутка текста т.е. дробной части gravity .. enter image description here. Я попробовал все атрибуты xml. Пожалуйста, помогите

+2

Я хотел бы посмотреть в 'атрибут baselineShift' из' TextPaint'. – kcoppock

+1

спасибо @kcoppock, я больше выкопал в расширение класса «MetricAffectingSpan» и изменил атрибут «baselineshift». Он работал как шарм :) – CodeFury

+2

1,5 года слишком поздно .. но не [SuperscriptSpan] (http://developer.android.com/reference/android/text/style/SuperscriptSpan.html) работает для этого? – andyandy

ответ

11

Я взломал его. Я размещаю это, поскольку это может быть полезно для других, и спасибо @kcoppock за подсказку. Я расширил класс MetricAffectingSpan, который влияет на форматирование текста на уровне символов таким образом, чтобы изменить ширину или высоту символов, расширяющих этот класс.

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

использовать это, чтобы обновить текст в ваших взглядах ..

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); 
Смежные вопросы