1. ホーム
  2. android

[解決済み] Androidでアプリケーション全体にカスタムフォントを設定するには?

2023-03-28 13:16:24

質問

Androidアプリケーションでカスタムフォントを設定することは可能ですか?

掲載されているものを試してみました。 はこちら を試してみましたが、私の extends Application クラスがどこにあるのかわかりません...

何かお手伝いできることはありますか?

EDITです。

以下を試してみました。

  • assetsフォルダを追加し、ここにあるようにフォントを中に挿入します。

  • を継承した新しいクラスを追加します。 Application

  • この新しいクラスを私の AndroidManifest.xml .

  • 自分のスタイルで、追加しました。

MyApp.javaです。

public class MyApp extends Application {
  @Override
  public void onCreate() {
     super.onCreate();
    FontsOverride.setDefaultFont(this, "DEFAULT", "raleway_regular.ttf");
    //  This FontsOverride comes from the example I posted above
  }
  }

AndroidManifest.xmlです。

<application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:supportsRtl="true"
      android:name=".MyApp"
      android:theme="@style/AppTheme">
     ....

styles.xmlを参照してください。

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:fontFamily">default</item>
 </style>

しかし、私のフォントはまだ変更されていません...何かアイデアはありますか?

次に MyApp クラスが呼び出されます。しかし、私のフォントには何の影響もありません...。

EDIT2です。 私は、ボタンにカスタムスタイルを設定した後、私のボタンがカスタムフォントを適用することに気づきました。以下は、私のカスタムボタンのスタイルです。

<style name="MyButtonStyle" parent="Widget.AppCompat.Button">
    <item name="textAllCaps">false</item>
    <item name="android:textAllCaps">false</item>
</style>

そして、今はこんな感じです。

つまり、ボタンにはスタイルが適用されますが TextView . なぜカスタムフォントがアプリケーションのすべてのアイテムに適用されないのか、何か思い当たることはありますか?

どのように解決するのですか?

クラスを作成する

public class MyApp extends Application{
// Put the onCreate code as you obtained from the post link you reffered
}

次に、AndroidManifest.xmlのapplicationタグで、アプリケーション・クラスの名前を指定します。この例では、MyAppです。

<application
android:name=".MyApp"
...
>
...
</application>

このため、アプリが開かれるたびに、MyAppクラスのonCreateメソッドが呼び出され、フォントが設定されることになります。

更新 フォントファイルを assets/fonts/your_font_file.ttf の下に置いてください。

アプリケーションクラス(MyApp)のonCreateメソッドの下に、以下の行を記述してください。

TypefaceUtil.overrideFont(getApplicationContext(), "SERIF", "fonts/your_font_file.ttf");

TypefaceUtilのソースファイル

public class TypefaceUtil {

    /**
     * Using reflection to override default typeface
     * NOTICE: DO NOT FORGET TO SET TYPEFACE FOR APP THEME AS DEFAULT TYPEFACE WHICH WILL BE OVERRIDDEN
     *
     * @param context                    to work with assets
     * @param defaultFontNameToOverride  for example "monospace"
     * @param customFontFileNameInAssets file name of the font from assets
     */
    public static void overrideFont(Context context, String defaultFontNameToOverride, String customFontFileNameInAssets) {

        final Typeface customFontTypeface = Typeface.createFromAsset(context.getAssets(), customFontFileNameInAssets);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Map<String, Typeface> newMap = new HashMap<String, Typeface>();
            newMap.put("serif", customFontTypeface);
            try {
                final Field staticField = Typeface.class
                        .getDeclaredField("sSystemFontMap");
                staticField.setAccessible(true);
                staticField.set(null, newMap);
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } else {
            try {
                final Field defaultFontTypefaceField = Typeface.class.getDeclaredField(defaultFontNameToOverride);
                defaultFontTypefaceField.setAccessible(true);
                defaultFontTypefaceField.set(null, customFontTypeface);
            } catch (Exception e) {
                Log.e(TypefaceUtil.class.getSimpleName(), "Can not set custom font " + customFontFileNameInAssets + " instead of " + defaultFontNameToOverride);
            }
        }
    }
}

ここでstyle.xmlファイルを更新します。

マニフェストファイルに、アクティビティに含まれるスタイルを以下の行に追加します。

  <item name="android:typeface">serif</item>

これが役に立つといいのですが