私はカスタムフォントを拡張しましたTextView
私は自分のアプリケーション内でカスタムフォントを使用していますが、何らかの理由で私はプログラムの実行時例外問題のフォントを見つけられません。ランタイム例外:試したフォントごとにフォントが見つかりません - Android
私が使用しているディレクトリの形式はmain > assets > fonts > Portrait-Light.ttf
である私は解決策のためにどこでも見てきたが、それらはすべて、SOで同じ答えを丸めているように見えます。
CustomFontTextView.java:
public class CustomFontTextView extends TextView {
public CustomFontTextView(Context context) {
super(context);
applyCustomFont(context);
}
public CustomFontTextView(Context context, AttributeSet attrs) {
super(context, attrs);
applyCustomFont(context);
}
public CustomFontTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
applyCustomFont(context);
}
private void applyCustomFont(Context context) {
Log.e("it gets here", "custom font");
Typeface customFont = FontCache.getTypeface("Roboto-Italic.ttf", context);
setTypeface(customFont);
}
}
FontCache.java
class FontCache {
private static HashMap<String, Typeface> fontCache = new HashMap<>();
static Typeface getTypeface(String fontname, Context context) {
Typeface typeface = fontCache.get(fontname);
if (typeface == null) {
try {
typeface = Typeface.createFromAsset(context.getAssets(), "fonts/" + fontname);
} catch (Exception e) {
Log.e("failed", e.getMessage());
}
fontCache.put(fontname, typeface);
}
return typeface;
}
}
XML:私は肝炎
<icn.premierandroid.misc.CustomFontTextView
android:id="@+id/switch_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:textSize="14sp"
android:textColor="@color/colorPrimary"
android:gravity="center_horizontal"
android:text="@string/are_you_over_18_years_old"/>
eは.otf
などの異なるフォーマットで、Roboto-Italic.ttf
などの異なるフォントと、Sunset-Clouds.ttf
というdafont.comの別のランダムなフォントで試しましたが、まだエラーメッセージが表示されます。何が起こっていますか?これはうまくいくはずです。私はGradle、Grade-Wrapperディストリビューション、Android gradleプラグインなどのプラグインをすべて更新しました。
は、私もそれを行うための一つの方法を試してみました:
AssetManager am = context. getApplicationContext(). getAssets();
Typeface font = Typeface.createFromAsset(
am, String.format(Locale.US, "fonts/%s", "portrait-light.ttf"));
私は何かが足りないのですか?
更新:
キャッチを削除すると、このスタックトレースが表示されます。
プロセス:icn.premierandroid、PID:3829 java.lang.RuntimeException:活性ComponentInfoを開始できません{icn.premierandroid/icn.premierandroid.RegisterActivity} android.view.InflateException:バイナリXMLファイル行#100:エラー 膨張クラスicn.premierandroid.misc.CustomFontTextView android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767) でandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2702) で ... ..
原因:android.view.InflateException:B inary XMLファイルライン#100: andic.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)の に、icn.premierandroid.misc.CustomFontTextView をinflatingする際にエラーがandroid.view.LayoutInflater.createViewで発生しました。 java.lang.reflect.Constructor.newInstanceでにjava.lang.reflect.InvocationTargetException :android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
.....によって引き起こさ
で (ネイティブメソッド) at java.lang.reflect.Constructor.newInstance(コンストラクタ。Javaの:288 android.view.LayoutInflater.createViewで) (LayoutInflater.java:614)
....によって引き起こさ
:java.lang.RuntimeException:フォントの資産は フォント/ GleegooRegularが見つかりません。 icn.premierandroid.misc.CustomFontTextView.applyCustomFontでicn.premierandroid.misc.FontCache.getTypeface(FontCache.java:21) (CustomFontTextView.javaでandroid.graphics.Typeface.createFromAsset(Typeface.java:272) におけるTTF :28) at icn.premierandroid.misc.CustomFontTextView(CustomFontTextView.java:18) at java.lang.reflect.Constructor .newInstance(ネイティブメソッド)
.....
UPDATE 2:
わかりましたので、奇妙な回避策はこのためにあります。あなたがassets
フォルダをのmain
フォルダにまっすぐに追加すると、アンドロイドスタジオはそれを気に入らないようです。最初にapp/src/main/res
フォルダに追加してからmain
フォルダに移動する必要があります。なぜそれがこのようなものなのかという手掛かりはありませんが、それは私の問題を解決しました。
など、
とのTextViewにフォントセット、のonCreateメソッド内
そして....これを試してみてくださいエラースタックトレース –
を投稿してください@最大、あなたのためにそれを追加、芽。 – BIW
"フォントアセットが見つかりませんフォント/ GleegooRegular.ttf"、私は確信していますが、あなたのフォントディレクトリにこのフォントが表示されません。 – harshitpthk