我正在使用Calligraphy库在应用程序中使用自定义字体。我在CalligraphyConfig方法的Application类中使用#onCreate()在默认字体下为整个应用程序设置了自定义字体,并且工作正常。当我需要更改一个 Activity 的字体(SettingsActivity)时,问题就来了。

我尝试在style中使用自定义字体,但是它没有更改 Activity 的字体。

以下是样式的代码

    <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>

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

我通过样式方法对自定义字体做错了吗?还是有更好的方法来做到这一点?

最佳答案

看起来是因为AppCompat在运行时创建了不同版本的按钮/文本 View 。

在应用程序中的书法启动中,添加以下行:

.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()
            );
    //....
}

那应该照顾您的textviews。

编辑:

现在应该使用https://github.com/chrisjenx/Calligraphy/pull/191修复此问题,当前作为快照。

10-08 08:27
查看更多