2013-03-12 31 views
8

Tôi đang tìm kiếm một bản xem văn bản trông giống như enter image description here. Tôi đã sử dụng mã dưới đây để thực hiện điều này ..Hai kiểu khác nhau trong một lần xem văn bản đơn với trọng lực và chiều cao khác nhau

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

đây là phong cách được sử dụng trong khoảng thời gian ..

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

tất cả mọi thứ có vẻ tốt đẹp ngoại trừ khoảng cách của tuổi nhắm mục tiêu của một phần văn bản tức là số thập phân trọng lực .. enter image description here. Tôi đã thử tất cả các thuộc tính xml. Vui lòng giúp

+2

tôi sẽ nhìn vào 'baselineShift' thuộc tính của 'TextPaint'. – kcoppock

+1

nhờ @kcoppock, tôi đã đào sâu hơn vào việc mở rộng lớp 'MetricAffectingSpan' và thay đổi thuộc tính' baselineshift'. Nó hoạt động như một nét duyên dáng :) – CodeFury

+2

1,5 năm quá muộn .. nhưng không [SuperscriptSpan] (http://developer.android.com/reference/android/text/style/SuperscriptSpan.html) làm việc cho điều này? – andyandy

Trả lời

11

Tôi đã bẻ khóa. Tôi đăng bài này vì nó có thể hữu ích cho người khác và nhờ @kcoppock cho gợi ý. Tôi đã mở rộng MetricAffectingSpan lớp ảnh hưởng đến định dạng văn bản cấp ký tự theo cách thay đổi chiều rộng hoặc chiều cao của các ký tự mở rộng lớp này.

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

này sử dụng để cập nhật các văn bản trong quan điểm của bạn ..

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); 
Các vấn đề liên quan