2012-11-27 28 views
7

parçası farklı yazı tipi ve rengini ayarlayın bu çalıştı:bir TextView

String s = "Some big string" 
SpannableStringBuilder sb = new SpannableStringBuilder(s); 
//normal font for 1st 9 chars 
sb.setSpan(robotoRegular, 0,9,Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
//bold font for rest of the chars 
sb.setSpan(robotoBold, 9,s.length(),Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
//also change color for rest of the chars 
sb.setSpan(new ForegroundColorSpan(Color.BLACK), 9,s.length(),Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
textView.setText(sb); 

Ama bu işe yaramadı.

Yalnızca en son setSpan'ı alır, örn., Metin rengi değiştiriliyor, ancak yazı tipi değiştiriliyor.

+0

nasıl 'robotoRegular' ve' robotoBold' tanımlarım

Şimdi aşağıdakileri yapın? –

+0

Sınıf Değişkenleri: ** robotoRegular = Typeface.createFromAsset (getAssets(), "fontlar/Roboto-Regular.ttf"); ** –

cevap

28

Bunun yerine Typeface bir TypefaceSpan kullanmak zorunda.

Ancak özel bir yazı tipi kullandığınızdan, TypefaceSpan'u uzatmanız gerekir.

Bu answer göz atın ve CustomTypefaceSpan sınıfı oluşturun. Bunun için utils sınıfları yapmayı tercih peaple için

Typeface robotoRegular = Typeface.createFromAsset(getAssets(), "fonts/Roboto-Regular.ttf"); 
Typeface robotoBold = Typeface.createFromAsset(getAssets(), "fonts/Roboto-Bold.ttf"); 

TypefaceSpan robotoRegularSpan = new CustomTypefaceSpan("", robotoRegular); 
TypefaceSpan robotoBoldSpan = new CustomTypefaceSpan("", robotoBold); 

// normal font for 1st 9 chars 
sb.setSpan(robotoRegularSpan, 0, 9, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
// bold font for rest of the chars 
sb.setSpan(robotoBoldSpan, 9, s.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
// also change color for rest of the chars 
sb.setSpan(new ForegroundColorSpan(Color.BLUE), 9, s.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
textView.setText(sb); 
0

onay Bu kod: -

protected void onDraw(Canvas canvas) { 

     Paint circlePaint = new Paint(); 
     Typeface mType = Typeface.create(Typeface.SANS_SERIF, Typeface.ITALIC); 
     circlePaint.setTextSize(25); 
     circlePaint.setColor(Color.RED); 
     circlePaint.setTypeface(mType); 
     canvas.drawText("Default Typeface", 50, 100, circlePaint); 
     // 
     circlePaint.setFlags(Paint.UNDERLINE_TEXT_FLAG); 
     circlePaint.setColor(Color.YELLOW); 
     canvas.drawText("Underline Text Flag", 50, 120, circlePaint); 
     // 
     circlePaint.setFlags(Paint.STRIKE_THRU_TEXT_FLAG); 
     circlePaint.setColor(Color.GREEN); 
     canvas.drawText("Strike Thru Text Flag", 50, 140, circlePaint); 
     // 
     circlePaint.setFlags(Paint.ANTI_ALIAS_FLAG); 
     circlePaint.setColor(Color.WHITE); 
     canvas.drawText("Anti Alias Flag", 50, 160, circlePaint); 
     // 
     circlePaint.setFlags(Paint.DEV_KERN_TEXT_FLAG); 
     circlePaint.setColor(Color.WHITE); 
     canvas.drawText("Dev Kern Text Flag", 50, 180, circlePaint); 
     // 
     circlePaint.setFlags(Paint.FAKE_BOLD_TEXT_FLAG); 
     circlePaint.setColor(Color.CYAN); 
     canvas.drawText("Fake Bold Text Flag", 50, 200, circlePaint); 
    } 
0

:

public static SpannableStringBuilder makeTextBold (Activity activity, String string, int fromCharIndex, int toCharIndex) { 
    return makeTextBold(activity, new SpannableStringBuilder(string), fromCharIndex, toCharIndex); 
} 

public static SpannableStringBuilder makeTextBold (Activity activity, SpannableStringBuilder string, int fromCharIndex, int toCharIndex) { 
    SpannableStringBuilder sb = new SpannableStringBuilder(string); 
    Typeface bold = Typeface.createFromAsset(activity.getAssets(), "fonts/NexaBold.ttf"); 
    TypefaceSpan robotoBoldSpan = new CustomTypefaceSpan("", bold); 
    sb.setSpan(robotoBoldSpan, fromCharIndex, toCharIndex, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
    return sb; 
} 

public static SpannableStringBuilder colorText (int resourceId, String string, Activity activity, int fromCharIndex, int toCharIndex) { 
    return colorText(resourceId, new SpannableStringBuilder(string), activity, fromCharIndex, toCharIndex); 
} 

public static SpannableStringBuilder colorText (int resourceId, SpannableStringBuilder sb, Activity activity, int fromCharIndex, int toCharIndex) { 
    sb.setSpan(new ForegroundColorSpan(activity.getResources().getColor(resourceId)), fromCharIndex, toCharIndex, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
    return sb; 
}