2015-07-02 4 views
14

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

Я попытался использовать собственный шрифт в 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> 

В Manifest

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

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

+0

Вы добавили attachBaseContext в свою деятельность? – EagleEye

+0

@ EagleEye Да, я это сделал. Как я сказал, пользовательский шрифт по умолчанию работает нормально. –

+0

Вы подходите со стилем, кажется, хороши ... Но я читал в readme of lib, может быть, что-то интересное: 'Default - если определено в CalligraphyConfig, это не используется ни в одном из вышеприведенных не найдено ИЛИ, если одно из приведенных выше возвращает недопустимый шрифт. У вас есть недопустимый шрифт? Это может быть проблема (я надеюсь, что это потому, что, если нет, это будет сложнее исправить) –

ответ

5

Похоже, что это из-за того, что 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() 
      ); 
    //.... 
} 

И что должны заботиться о ваших TextViews.

Edit:

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

+0

Waooo That Worked. –

2

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

Я только что удалили

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

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

Смежные вопросы