我如何获得用户的当前区域在Android?
我可以得到默认的一个,但这可能不是当前的一个,对吗?
基本上,我想要当前地区的两个字母的语言代码。不是默认的。没有Locale.current()
Locale.current()
来自getDefault的文档:
getDefault
返回用户的首选语言环境。这可能已经被这个进程的setDefault(Locale)覆盖了。
同样来自Locale文档:
Locale
默认区域设置适用于涉及向用户显示数据的任务。
看来你应该直接用它。
默认的Locale是在运行时为你的应用程序进程从系统属性设置静态构造的,因此它将表示在设备当应用程序启动时上选择的Locale。通常情况下,这很好,但这意味着如果用户在应用程序进程运行后更改了设置中的Locale, getDefaultLocale()的值可能不会立即更新。
getDefaultLocale()
如果你在应用程序中出于某种原因需要捕获这样的事件,你可以尝试从资源Configuration对象中获取可用的Locale。
Configuration
Locale current = getResources().getConfiguration().locale;
如果您的应用程序需要更改设置,您可能会发现在更改设置后该值更新得更快。
Android N (Api级别24)更新(无警告):
Locale getCurrentLocale(Context context){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ return context.getResources().getConfiguration().getLocales().get(0); } else{ //noinspection deprecation return context.getResources().getConfiguration().locale; } }
如果你正在使用Android支持库,你可以使用ConfigurationCompat代替@Makalele的方法来消除弃用警告:
ConfigurationCompat
Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);
或者用科特林语:
val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]
以上所有答案-不工作。 因此,我将在这里放置一个函数,工作在4和9 android
private String getCurrentLanguage(){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ return LocaleList.getDefault().get(0).getLanguage(); } else{ return Locale.getDefault().getLanguage(); } }
根据官方的文档,支持库中已弃用ConfigurationCompat
您可以考虑使用
LocaleListCompat.getDefault()[0].toLanguageTag()第0个位置将是用户首选的语言环境
LocaleListCompat.getDefault()[0].toLanguageTag()
在第0个位置获得默认区域将是 LocaleListCompat.getAdjustedDefault() < / p >
LocaleListCompat.getAdjustedDefault()
我用过这个:
String currentLanguage = Locale.getDefault().getDisplayLanguage(); if (currentLanguage.toLowerCase().contains("en")) { //do something }
至于现在,我们可以使用ConfigurationCompat类来避免警告和不必要的样板。
我使用了这个简单的代码:
if(getResources().getConfiguration().locale.getLanguage().equalsIgnoreCase("en")) { //do something }