如何根据设备上的语言更改 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
}
}
我的应用程序中有 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 更改字体名称吗?
有
我使用的方法是在每个 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
}
}