根据用户选择以编程方式更改整个应用程序中的字体

Change font in whole application programmatically, based in user selection

我正在开发一个应用程序,用户可以在其中选择网络中的字体(他有大约 3 或 4 个选择)。该应用程序必须在整个应用程序中具有选定的字体,因此我需要以编程方式更改它(不涉及 XML)。我通过网络服务收到了用户选择的字体。我在网上搜索过,但我读过的所有解决方案都需要使用 XML.

0- 该应用在资产文件夹中有一些 (3-4) 个 .ttf 文件

1- 用户在网络中选择了一种字体。

2- Android 应用程序启动,并获取表示用户选择的字体的字符串常量(或 int)。

3- Android 应用程序根据用户选择在整个应用程序中更改其字体。

有办法实现吗?

要以编程方式更改整个应用程序中的字体,您可以尝试 书法

https://github.com/InflationX/Calligraphy

初始化字体将在应用程序中class所以我相信你可以实现你所要求的

 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());

我假设您可以从服务器检索用户选择