使用书法图书馆的一些活动的不同字体

时间:2015-07-02 05:22:19

标签: android fonts android-styles

我正在使用Calligraphy库在我的应用程序中使用自定义字体。我使用CalligraphyConfigApplication方法的#onCreate()类中使用默认字体将自定义字体设置为我的整个应用程序,它运行正常。当我需要更改一个活动的字体(SettingsActivity)时出现问题。

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

以下是Style

的代码
    <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>

我是否通过样式方法使用自定义字体做错了什么?或者有更好的方法吗?

2 个答案:

答案 0 :(得分:6)

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

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

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

这应该照顾你的观点。

编辑:

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

答案 1 :(得分:2)

不是最佳解决方案,但比该活动中的自定义字体更好。

我刚刚删除了

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

来自我尝试更改字体的活动。在该活动中使用默认的android字体,这比我的其他活动的自定义字体更好。