Изменить шрифт во всем приложении программно, основываясь на выборе пользователя - PullRequest
0 голосов
/ 05 марта 2020

Я разрабатываю приложение, в котором пользователь выбирает в Интернете шрифт (у него есть около 3 или 4 вариантов). Приложение должно иметь выбранный шрифт во всем приложении, поэтому мне нужно изменить его программно (без участия XML). Я получил выбранный пользователем шрифт через веб-сервис. Я искал в Интернете, но все решения, которые я прочитал, требуют использования XML.

0 - в приложении есть несколько (3-4) файлов .ttf в папке активов

1- Пользователь выбирает шрифт в Интернете.

2- Android приложение запускается и получает строковую константу (или int), которая представляет шрифт, выбранный пользователем.

3 - Приложение Android меняет свой шрифт в соответствии с выбором пользователя во всем приложении.

Есть ли способ добиться этого?

1 Ответ

0 голосов
/ 05 марта 2020

Чтобы программно изменить шрифт во всем приложении, вы можете попробовать Каллиграфия Библиотека

https://github.com/InflationX/Calligraphy

Инициализация шрифта будет в класс Application, так что я считаю, что вы можете достичь того, о чем вы просите

 ViewPump.init(ViewPump.builder()
        .addInterceptor(new CalligraphyInterceptor(
                new CalligraphyConfig.Builder()
                    .setDefaultFontPath("fonts/Roboto-RobotoRegular.ttf")
                    .setFontAttrId(R.attr.fontPath)
                    .build()))
        .build());

вы можете сделать что-то вроде

String fontPath;
if(userSelection == 0) { //userSelection value from the server
    fontPath = "fonts/FirstFont.ttf"
} else if (userSelection == 1) {
    fontPath = "fonts/SecondFont.ttf"
} else {
    fontPath = "fonts/ThirdFont.ttf"
}

ViewPump.init(ViewPump.builder()
    .addInterceptor(new CalligraphyInterceptor(
         new CalligraphyConfig.Builder()
             .setDefaultFontPath(fontPath)
             .setFontAttrId(R.attr.fontPath)
              .build()))
            .build());

Я предполагал, что вы можете получить выбор пользователя с сервера

...