我正在努力在应用上设置区域设置。
我想要的是一个切换按钮:我想让用户在默认系统区域设置和固定语言(例如“en”)之间切换。
我从S.O.的另一张票中拿到了这段小码。 (谢谢):
private static void setThisLocale(Locale locale) {
Locale.setDefault(locale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = locale;
ctx.getResources().updateConfiguration(config, ctx.getResources().getDisplayMetrics());
Log.d("locale", "locale set: " + locale.getLanguage());
}
此函数设置区域设置,它看起来有效。
问题是defaultLanguage,在此之后,仍然设置,我再也检测不到哪个是原始语言环境。所以,我不能回去!例如:
defaultLocale = ctx.getResources().getConfiguration().locale;
或
defaultLocale = Locale.getDefault();
两者都会返回“en”,即使在更改之前默认语言环境是......说......“它”。
奇怪的是,即使手动重启应用程序后它也不会改变,看起来Android会存储任何应用程序的默认语言环境。因此,即使在应用启动时检查哪个是默认语言环境也不起作用。
返回原始defaultLocale的唯一方法是重新安装应用程序,此时按钮一次允许我在原始默认语言环境和“en”之间切换,直到它开始交替再次“en”和“en”。
从这看起来,看起来任何应用程序都存储了默认语言环境,但我并不知道它。
当然,一个糟糕的编程补丁可能只是在我发现它与“en”不同时才记住默认语言环境,但这不会检测到真正的系统区域设置,我想找到更好的东西。
有没有办法检测哪个是SYSTEM的REAL默认语言环境,而不仅仅是为应用程序设置的最新默认语言环境?
找到它。正确的答案是:
defaultLocale = Resources.getSystem().getConfiguration().locale;