1

TextView にカスタム書体を指定する方法は既に知っています。現在、私のアプリケーションは 2 つの ttf ファイルに分割された 1 つのカスタム フォントを使用しています。1 つは通常の文字用で、もう 1 つは太字用です。

ここで、Html.fromHtml() と同じように、両方の inone TextView を使用できるようにしたいと考えています。システムフォントで動くので自作の書体でもできるはず。現在、太字は通常のフォントで描画され、テキスト ペイント用の偽の太字テキストはかなり醜いです。

何か案が ?

ありがとう

4

1 に答える 1

3

単一の TextView 内で複数のカスタム フォントを使用する場合:

次のコードを使用します:(私はバングラとタミル語のフォントを使用しています)

  TextView txt = (TextView) findViewById(R.id.custom_fonts);  
        txt.setTextSize(30);
        Typeface font = Typeface.createFromAsset(getAssets(), "Akshar.ttf");
        Typeface font2 = Typeface.createFromAsset(getAssets(), "bangla.ttf");   
        SpannableStringBuilder SS = new SpannableStringBuilder("আমারநல்வரவு");
        SS.setSpan (new CustomTypefaceSpan("", font2), 0, 4,Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
        SS.setSpan (new CustomTypefaceSpan("", font), 4, 11,Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
        txt.setText(SS);

結果は次のとおりです。

ここに画像の説明を入力


CustomTypefaceSpan クラス:

package my.app;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.text.style.TypefaceSpan;

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

参照

于 2012-06-04T21:40:51.060 に答える