Различные шрифты для некоторых видов деятельности с использованием библиотеки каллиграфии

Я использую Calligraphy библиотеку для использования пользовательского шрифта в своем приложении. Я установил собственный шрифт для всего моего приложения по умолчанию, используя CalligraphyConfig, в моем классе Application в методе #onCreate(), и он работает нормально. Проблема возникает, когда мне нужно изменить шрифт одного действия (SettingsActivity).

Я попытался использовать собственный шрифт в стиле, но он не изменил шрифт активности.

Ниже приведен код стиля

    <style name="EnglishActivitiesTheme" parent="AppTheme">
        <item name="android:textViewStyle">@style/AppTheme.Widget.TextView</item>
    </style>

    <style name="AppTheme.Widget.TextView" parent="android:Widget.Holo.Light.TextView">
        <item name="fontPath">fonts/Roboto-Regular.ttf</item>
    </style>

В манифесте

    <activity
        android:name=".SettingsActivity"
        android:theme="@style/EnglishActivitiesTheme"
        android:parentActivityName=".MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />
    </activity>

Я делаю что-то неправильно с пользовательским шрифтом, хотя метод стиля? или Есть ли лучший способ сделать это?

Ответы

Ответ 1

Похоже на то, что AppCompat создает другую версию кнопок/текстовых просмотров во время выполнения.

В своем запуске каллиграфии в приложении добавьте строку:

.addCustomStyle(AppCompatTextView.class, android.R.attr.textViewStyle)

чтобы получить что-то вроде:

@Override
public void onCreate() {
    super.onCreate();
    CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
                            .setDefaultFontPath("fonts/some-other-custom-font.ttf")
                            .addCustomStyle(AppCompatTextView.class, android.R.attr.textViewStyle)
                            .setFontAttrId(R.attr.fontPath)
                            .build()
            );
    //....
}

И это должно заботиться о ваших текстовых комментариях.

Edit:

Теперь это должно быть исправлено с помощью https://github.com/chrisjenx/Calligraphy/pull/191, в настоящее время в качестве моментального снимка.

Ответ 2

Не лучшее решение, но лучше, чем пользовательский шрифт в этом действии.

Я просто удалил

@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}

из активности, где я пытался изменить шрифт. В этом случае используется стандартный шрифт android по умолчанию, который лучше, чем этот пользовательский шрифт для других моих действий.