web-dev-qa-db-ja.com

Androidカスタムフォントスパン可能な書体スパン

アプリケーション全体でHelveticaフォントを使用しています。現在、アセットとは別にフォントを作成しています。だから私はこれらの3つを言った

HelveticaNeue = Typeface.createFromAsset(application.getAssets(), "fonts/HelveticaNeue.ttf");
HelveticaNeueBold = Typeface.createFromAsset(application.getAssets(), "fonts/HelveticaNeueBold.ttf");
HelveticaNeueBoldItalic = Typeface.createFromAsset(application.getAssets(), "fonts/HelveticaNeueBoldItalic.ttf");

1つのTextViewに1つの書体を使用すると、すべてがうまく機能します。ただし、スパナブルを使用する必要があります

Spannable WordtoSpan = new SpannableString("This text should be normal, but this needs to be bold, and normal");    
WordtoSpan.setSpan(new TypefaceSpan("bold"), 5, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

そして、弦の一部をHeleveticaNeueBoldにし、一部をHelveticaNeueにしたいです。必要なのは、Androidに、上記の3つのフォントが実際に関連していることを示して、それらをうまく切り替えることができるようにすることだと思います。これを行う他の方法も探しています。

21
Leo

カスタムTypefaceSpanを作成する必要があります。良いニュースは、それらが難しくないということです。例については、 ここ を参照してください。

20
Jim Baca

次のことができます。

SpannableString spannableString = new SpannableString("your text");
Typeface typeface = Typeface.create(ResourcesCompat.getFont(this, R.font.your_font);
spannableString.setSpan(
    new TypefaceSpan(typeface, Typeface.NORMAL)), 
    0, 4, 
    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

このコンストラクターは、以前のスタイルのテキストを置き換えて、必要なものを実現します。ただし、問題は、API28で導入されたことです。

0
RodXander