2015-11-28 7 views
1

Итак, у меня есть исследование этого и нашел код, относящийся к теме, но он не работает, когда я пытаюсь. Мне приходилось менять шрифт для каждого текстового вида, и это сводит меня с ума. То, что я сделал до сих пор, это создать класс, который будет overide шрифта:Как установить пользовательский шрифт для всего приложения в Android

public final class FontsOverride { 

public static void setDefaultFont(Context context, 
            String staticTypefaceFieldName, String fontAssetName) { 
    final Typeface regular = Typeface.createFromAsset(context.getAssets(), 
      fontAssetName); 
    replaceFont(staticTypefaceFieldName, regular); 
} 

protected static void replaceFont(String staticTypefaceFieldName, 
            final Typeface newTypeface) { 
    try { 
     final Field staticField = Typeface.class 
       .getDeclaredField(staticTypefaceFieldName); 
     staticField.setAccessible(true); 
     staticField.set(null, newTypeface); 
    } catch (NoSuchFieldException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } 
} 
} 

А потом каждый раз, когда я желаю overide шрифта в каждом классе я пытался implemnt это:

FontsOverride.setDefaultFont(this, "DEFAULT", "ComicRelief.ttf"); 

Там должен быть простым способом сделать это, я пытался часами и просто не могу обойти его.

+0

Возможный дубликат [Android - Использование пользовательского шрифта] (http://stackoverflow.com/questions/3651086/android-using-custom-font) –

+0

Используйте стиль и используйте стиль в приложении – Shriram

+0

yes as said by shriram вы можете использовать стиль для установки шрифта ... и применить этот стиль ко всем компонентам, которые хотите изменить шрифт – sud

ответ

0

Просто создайте пользовательский класс TextView:

public class CustomTextView extends TextView { 

    public CustomTextView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     load(); 
    } 

    public CustomTextView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     load(); 
    } 

    public CustomTextView(Context context) { 
     super(context); 
     load(); 
    } 

    public void load() { 
     setTypeface(
      Typeface.createFromAsset(getContext().getAssets(), "pacifico.ttf"), 1 
     ); 
    } 

} 

Натяните настраиваемое представление для какого TextView вы хотите:

<com.your.package.views.CustomTextView 
    android:id="@+id/my_text_view" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

Вашего типа TextView теперь объявлен и приведение к CustomTextView:

CustomTextView myTextView = (CustomTextView) findViewById(R.id.my_text_view); 

И не забудьте поместить соответствующий шрифт в свою папку с ресурсами (в этом примере это s "pacifico.ttf").

+0

Нет ли способа сделать это один раз вместо того, чтобы реализовать его для каждого текстового вида? –

0

Что нужно использовать, это библиотека Calligraphy, чтобы установить пользовательский шрифт для всего приложения.

В своем классе пользовательских приложений, инициализация каллиграфии внутри onCreate():

CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() 
         .setDefaultFontPath("fonts/custom_font.ttf") 
         .setFontAttrId(R.attr.fontPath) 
         .build()); 

Здесь custom_font.ttf является шрифтом, который вы хотите применить ко всему приложению, и он должен находиться внутри assets/fonts папки.

Во-вторых, вам нужно переопределить метод attachBaseContext() в классах активности следующим образом:

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

Теперь, каждый текст, который вы видите в вашем приложении есть шрифт, который установлен по умолчанию через каллиграфию.

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