如何根据设备上的语言更改 fontFamily 属性?

How to change the fontFamily attribute according to on-device language?

我的应用程序中有 9 种字体,因为我的应用程序支持 3 种语言,像这样每种语言有 3 种字体

Arabic -> ar_light_font , ar_medium_font , ar_bold_font
English -> en_light_font , en_medium_font , en_bold_font
Spanish -> es_light_font , es_medium_font , es_bold_font

有些文本视图采用浅色字体,有些文本视图采用中号字体,有些文本视图采用粗体。

比如我有这些文字浏览量

<TextView
    android:id="txt1"
    android:fontFamily="ar_bold_font" />

<TextView
    android:id="txt2"
    android:fontFamily="ar_light_font" />

<TextView
    android:id="txt3"
    android:fontFamily="ar_medium_font" />

如果您注意到如果设备的语言是西班牙语,那么仍然会从阿拉伯语字体读取,那么有什么方法可以根据设备语言从 ar toes 更改字体名称吗?

使用 Android API,但它们似乎不太可靠。

我使用的方法是在每个 strings.xml 文件中声明一个 string 来告诉当前语言是什么。像这样:

<string name="app_lang">en-rGB</string>

(使用更合适的约定:"en-rGB"、"en-GB"、"english (GB)"、...)

然后,在代码中,有静态变量:

public final static String APP_LANG_EN_GB = "en-rGB";
// more languages…

并在需要时使用它:

void someMethod() {
    String appLang = getString(R.string.app_lang);

    switch(appLang) {
        case APP_LANG_EN_GB:
            // Logic for english GB language
            break;
        case …:
            // Logic for another language
    }

    if(appLang.equals(APP_LANG_EN_GB)) {
        // Do logic for english GB language
    }
}