В android Как применять шрифт для всего приложения?

Я хочу применить некоторый шрифт, скажем Times New Roman, только к моему приложению. Не для всей системы, а не для конкретного вида. Насколько я знаю

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

1]  Typeface  mFace = Typeface.createFromAsset(getContext().getAssets(),
                                     "fonts/samplefont.ttf");
    textView.setTypeface(mFace);


2] To apply font to whole application I can replace the DroidSans.ttf file with my font file.

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

Ответ 1

Отметьте это определение стилей шрифтов. Кроме того, вы можете ссылаться на этот стиль из файла манифеста на уровне приложения

<application
    android:theme="@style/Theme1">

Ответ 2

Я создал пользовательский виджет текстового вида, и в конструкторах был вызван этот код:

public static void SetCustomFont (TextView t, String fontName, Context c) {
        Typeface tf = Typeface.createFromAsset(c.getAssets(),
                fontName);
        t.setTypeface(tf);
}

Я использую один и тот же шрифт для всего приложения, поэтому я помещаю его в constuctor, а затем сделал глобальный поиск/замену для TextView

Ответ 3

Android не обеспечивает многого для поддержки применения шрифтов во всем приложении (см. эту проблему). У вас есть 4 варианта установки шрифта для всего приложения:

  • Option1: применить отражение для изменения системного шрифта
  • Option2: создавать и подклассы пользовательских классов View для каждого представления, для которого требуется собственный шрифт
  • Вариант 3: Внедрение искателя представления, который пересекает иерархию представлений для текущего экрана.
  • Option4: используйте стороннюю библиотеку.

Подробности этих параметров можно найти здесь.