Android 当我更改设备区域设置时,如何强制应用程序使用特定区域设置?
我有一个应用程序,有法语和德语的字符串。我将这些字符串分别放在Android 当我更改设备区域设置时,如何强制应用程序使用特定区域设置?,android,localization,Android,Localization,我有一个应用程序,有法语和德语的字符串。我将这些字符串分别放在值fr和值de中 当前状态: 设备区域设置:en US 当我启动应用程序时,我希望应用程序显示英语(en-US)。我只希望应用程序使用法语或德语,这取决于我通过API接收到的标志。为此,在Application.onCreate()中,我使用这段代码强制将区域设置为英语-locale在本例中是en-US public void updateLocale(@NonNull Locale locale) { checkNotNull(
值fr
和值de
中
当前状态:
设备区域设置:en US
当我启动应用程序时,我希望应用程序显示英语(en-US)。我只希望应用程序使用法语或德语,这取决于我通过API接收到的标志。为此,在Application.onCreate()
中,我使用这段代码强制将区域设置为英语-locale
在本例中是en-US
public void updateLocale(@NonNull Locale locale) {
checkNotNull(locale);
if (!getCurrentLocale().equals(locale)) {
Locale.setDefault(locale);
Resources resources = context.getResources();
Configuration configuration = resources.getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
configuration.setLocale(locale);
} else {
configuration.locale = locale;
}
setCurrentLocale(locale);
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
}
}
当前区域设置分别通过setCurrentLocale(locale)
和getCurrentLocale()
写入和读取SharedReferences
当我将设备区域设置更改为fr fr并返回应用程序时,区域设置将更改为法语,但我不希望发生这种情况(因为我还没有进行API调用以获取标志)。我想在onConfigurationChanged
方法中强制使用英语:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Locale newLocale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
newLocale = newConfig.getLocales().get(0);
} else {
newLocale = newConfig.locale;
}
if (!localeManager.isFlagTurnedOn()) {
localeManager.updateLocale(LOCALE_ENGLISH);
}
}
这不行!当我返回应用程序时,区域设置将更改为法语(如果我将设备区域设置更改为fr)。我怎样才能防止这种情况发生?此外,如何确保应用程序在更改为横向时不会默认为系统区域设置
任何帮助都将不胜感激!谢谢