開発する必要のあるアプリケーションから、FontName-Regular、FontName-Bold、FontName-it。アプリケーションのすべてのテキストビューで使用する必要があります。最初は簡単な作業だと思いました。 SOを見て、とても素敵なスレッドを見つけました: ここ
だから最初に私は好きでした:
_public static void overrideFonts(final Context context, final View v) {
try {
if (v instanceof ViewGroup) {
ViewGroup vg = (ViewGroup) v;
for (int i = 0; i < vg.getChildCount(); i++) {
View child = vg.getChildAt(i);
overrideFonts(context, child);
}
} else if (v instanceof TextView) {
((TextView)v).setTypeface(FONT_REGULAR);
}
} catch (Exception e) {
e.printStackTrace();
// ignore
}
}
_
そして、私のアクティビティのonCreate中にこのメソッドを呼び出しました。私のアプリのすべてのtextViewは、そのフォントと男の子を表示していました。とても簡単に逃げることができてうれしかったです。いくつかのテキストビューが必要な画面に到達するまで太字as Style
(_Android:textStyle="bold"
_)。次に、このソリューションでは、アセットからFont-Bold。ttfをロードする可能性がないことに気付きました。
さらに調べて、同じSO質問:
_public class MyTextView extends TextView {
public MyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyTextView(Context context) {
super(context);
init();
}
public void init() {
Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "font/chiller.ttf");
setTypeface(tf ,1);
}
}
_
これはさらに良く見えます。私の質問は、コントロールのスタイルが太字に設定されているかどうかをinit()
で検出して、要求された書体を割り当てるにはどうすればよいですか?
お時間をいただきありがとうございます。
LE。以下の例に従って、クラスを次のように更新しました。
_public class MyTextView extends TextView {
Typeface normalTypeface = Typeface.createFromAsset(getContext().getAssets(), Constants.FONT_REGULAR);
Typeface boldTypeface = Typeface.createFromAsset(getContext().getAssets(), Constants.FONT_BOLD);
public MyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyTextView(Context context) {
super(context);
}
public void setTypeface(Typeface tf, int style) {
if (style == Typeface.BOLD) {
super.setTypeface(boldTypeface/*, -1*/);
} else {
super.setTypeface(normalTypeface/*, -1*/);
}
}
}
_
デバッグすると、アプリはsetTypeFaceになり、太字のものが適用されているように見えますが、私のレイアウトでは、太字ではなく、変更が表示されません。使用するフォントに関係なく、TextViewは変更されず、デフォルトのAndroidフォントで表示されます。なぜだろうか?
私はブログ投稿にすべてを要約しました ここに私のブログにあります 多分それは誰かを助けるでしょう。
TextView
のコンストラクターは、XML属性_Android:textStyle
_から取得したstyle
パラメーターを使用してsetTypeface(Typeface tf, int style)
を呼び出します。したがって、この呼び出しをインターセプトして独自の書体を強制する場合は、次のようにこのメソッドをオーバーライドできます。
_public void setTypeface(Typeface tf, int style) {
Typeface normalTypeface = Typeface.createFromAsset(getContext().getAssets(), "font/your_normal_font.ttf");
Typeface boldTypeface = Typeface.createFromAsset(getContext().getAssets(), "font/your_bold_font.ttf");
if (style == Typeface.BOLD) {
super.setTypeface(boldTypeface/*, -1*/);
} else {
super.setTypeface(normalTypeface/*, -1*/);
}
}
_
私のCustomTextView
を使用すると、assets
フォルダー内のフォントファイル名を指定できます。
https://github.com/mafshin/CustomTextView
使い方はとても簡単です。
<com.my.app.CustomTextView
xmlns:custom="http://schemas.Android.com/apk/res/com.my.app"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Test text"
Android:id="@+id/testcustomview"
custom:fontAssetName="Politica XT.otf"
/>
カスタムフォント用の独自のパッケージを作成してプロジェクトにインポートし、後で使用できるようにする方がよいと思います。
package com.codeslips.utilities;
import Android.content.Context;
import Android.graphics.Typeface;
import Android.util.AttributeSet;
import Android.widget.TextView;
public class CustomTextView extends TextView {
public CustomTextView(Context context)
{ super(context); setFont(); }
public CustomTextView(Context context,AttributeSet set)
{ super(context,set); setFont(); }
public CustomTextView(Context context,AttributeSet set,int defaultStyle)
{ super(context,set,defaultStyle); setFont(); }
private void setFont() {
Typeface typeface=Typeface.createFromAsset(getContext().getAssets(),"fonts/your-font.ttf");
setTypeface(typeface); //function used to set font
}
}
次に、XMLファイルで上記のクラスを使用して、カスタムフォントを作成します
<com.codeslips.utilities.CustomTextView
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:text="Upload Image"
Android:paddingTop="10sp"
Android:textSize="14sp"
Android:layout_weight="0.7"
Android:textColor="@Android:color/white"/>