2014-10-29 69 views
0

我有一个自定义类,如下所示:如何保持两个不同的字体大小两个字符串在一个单一的文本视图

public class CustomTypefaceSpan extends TypefaceSpan { 
    private final Typeface newType; 

    public CustomTypefaceSpan(String family, Typeface type) { 
     super(family); 
     newType = type; 
    } 

    @Override 
    public void updateDrawState(TextPaint ds) { 
     applyCustomTypeFace(ds, newType); 
    } 

    @Override 
    public void updateMeasureState(TextPaint paint) { 
     applyCustomTypeFace(paint, newType); 
    } 

    private static void applyCustomTypeFace(Paint paint, Typeface tf) { 
     int oldStyle; 
     Typeface old = paint.getTypeface(); 
     if (old == null) { 
      oldStyle = 0; 
     } else { 
      oldStyle = old.getStyle(); 
     } 

     int fake = oldStyle & ~tf.getStyle(); 
     if ((fake & Typeface.BOLD) != 0) { 
      paint.setFakeBoldText(true); 
     } 

     if ((fake & Typeface.ITALIC) != 0) { 
      paint.setTextSkewX(-0.25f); 
     } 

     paint.setTypeface(tf); 
    } 
} 

我申请的范围如下:

Spannable spannable = new SpannableString(dispStatsPart1()+"\n"+dispStatswords()+"Months"); 
         spannable.setSpan(new CustomTypefaceSpan("sans-serif",Helv_cond_bold), 0, dispStatsPart1().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
         spannable.setSpan(new CustomTypefaceSpan("sans-serif",helv_light), dispStatsPart1().length(), dispStatsPart1().length() +(dispStatswords()+"Months").length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
         holder.numberText.setText(spannable); 

我想第一行不同的字体大小和第二行不同的字体大小,如何实现?

到目前为止,我已经尝试修改我的代码:

private static void applyCustomTypeFace(Paint paint, Typeface tf) { 
     int oldStyle; 
     Typeface old = paint.getTypeface(); 
     if (old == null) { 
      oldStyle = 0; 
     } else { 
      oldStyle = old.getStyle(); 
     } 

     int fake = oldStyle & ~tf.getStyle(); 
     if ((fake & Typeface.BOLD) != 0) { 
      paint.setFakeBoldText(true); 
     } 

     if ((fake & Typeface.ITALIC) != 0) { 
      paint.setTextSkewX(-0.25f); 
     } 
     if(flag == 0){ 
      paint.setTextSize(50); 
     }else{ 
      paint.setTextSize(50); 
     } 

     paint.setTypeface(tf); 
    } 

我通过标志来构造:

public CustomTypefaceSpan(String family, Typeface type, int flg) { 
     super(family); 
     newType = type; 
     flag = flg; 
    } 

但上面似乎并没有工作,字体大小增加或减少,但它发生在两个字符串中。

+0

请参阅本http://stackoverflow.com/questions/16335178/different-size-of-strings-in-the-same-textview – 2014-10-29 10:15:44

+0

虽然你的答案是有益的,但我使用的是自定义类和我想知道在这方面的实施。 – User3 2014-10-29 10:24:43

回答

0
yourTextView.setText(Html.fromHtml("xxx"))  
1

如果您想知道如何在同一个TextView中设置多个不同的尺寸,但使用绝对大小,而不是相对的,你可以做到这一点使用AbsoluteSpan。

dimens.xml

<dimen name="text_size_1">18sp</dimen> 
<dimen name="text_size_2">12sp</dimen> 

刚拿到尺寸所需的文本大小的像素

int textSize1 = getResources().getDimensionPixelSize(R.dimen.text_size_1); 
int textSize2 = getResources().getDimensionPixelSize(R.dimen.text_size_2); 

,然后基于文本

String text1 = "text1 font size is 18sp"; 
String text2 = "text2 font size is 12sp "; 

SpannableString span1 = new SpannableString(text1); 
span1.setSpan(new AbsoluteSizeSpan(textSize1), 0, text1.length(), SPAN_INCLUSIVE_INCLUSIVE); 

SpannableString span2 = new SpannableString(text2); 
span2.setSpan(new AbsoluteSizeSpan(textSize2), 0, text2.length(), SPAN_INCLUSIVE_INCLUSIVE); 

// let's put both spans together with a separator and all 
CharSequence finalText = TextUtils.concat(span1, "\n", span2); 

这里创建一个新的AbsoluteSpan是输出:

Two different font sizes for two strings in one single text view

相关问题