简体   繁体   中英

Different font for Some activities using Calligraphy Library

I am using Calligraphy Library for using custom font in my application. I set a custom font to my whole application by default font using CalligraphyConfig , in my Application class in the #onCreate() method and it is working fine. Problem comes when I need to change font of one activity (SettingsActivity).

I tried using custom font in style however It didn't change the font of activity.

Following is the code of 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>

In Manifest

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

Am I doing something wrong with custom font though style method? or Is there better method of doing this?

Looks like it's because of AppCompat creating a different version of buttons/textviews at runtime.

In your Calligraphy startup in your Application, add the line:

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

to end up with something like:

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

And that should take care of your textviews.

Edit:

This should now be fixed with https://github.com/chrisjenx/Calligraphy/pull/191 , currently as a snapshot.

Not Best Solution however better than custom font in that activity.

I just removed

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

from activity where I was trying to change font. In That activity using default android font which is better than that custom font for my other activities.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM