एक CustomTypefaceSpan क्लास बनाएँ:
import android.graphics.Paint;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.text.style.MetricAffectingSpan;
public class CustomTypefaceSpan extends MetricAffectingSpan {
private final Typeface typeface;
public CustomTypefaceSpan(Typeface typeface) {
this.typeface = typeface;
}
@Override
public void updateDrawState(TextPaint ds) {
applyCustomTypeFace(ds, typeface);
}
@Override
public void updateMeasureState(TextPaint paint) {
applyCustomTypeFace(paint, typeface);
}
private static void applyCustomTypeFace(Paint paint, Typeface tf) {
paint.setTypeface(tf);
}
}
एंड्रॉइड फ्रेमवर्क की कक्षाओं के समान ही उपयोग करें:
TextView textView = (TextView) findViewById(R.id.custom_fonts);
Typeface font = Typeface.createFromAsset(getAssets(), "Akshar.ttf");
Typeface font2 = Typeface.createFromAsset(getAssets(), "bangla.ttf");
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder("আমারநல்வரவு");
spannableStringBuilder.setSpan (new CustomTypefaceSpan(font2), 0, 4,Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
spannableStringBuilder.setSpan (new CustomTypefaceSpan(font), 4, 11,Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
textView.setText(spannableStringBuilder);
यह उत्तर इमरान राणा के जवाब पर आधारित है लेकिन विस्तार नहीं करता है TypefaceSpan
और फिर इसकी कार्यक्षमता को अक्षम करता है। सीधे CustomTypefaceSpan
फैलता MetricAffectingSpan
है।
यह जवाब इमरान राणा के जवाब के साथ एक दोष साझा करता है। स्पान को पार्सल नहीं किया गया है। यानी अगर आप ऐसा करते हैं (कोटलिन):
val parcel = Parcel.obtain()
TextUtils.writeToParcel(spannableStringBuilder, parcel, 0)
parcel.setDataPosition(0)
val sequence = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel)
parcel.recycle()
किसी भी CustomTypefaceSpan
ऑब्जेक्ट को सेट करने पर spannableStringBuilder
मार्शल्ड और अनमैर्शल्ड नहीं किया जाएगा।