如何在Android中获取用户当前的区域设置?
我可以获得默认值,但这可能不是当前正确的吗?
基本上我想要当前语言环境中的双字母语言代码。不是默认的。没有Locale.current()
答案 0 :(得分:442)
默认Locale
是在运行时为系统属性设置中的应用程序进程静态构建的,因此它将代表在应用程序启动时在该设备上选择的Locale
。通常,这很好,但它确实意味着如果用户在应用程序进程运行后更改其Locale
设置,则getDefaultLocale()
的值可能不会立即更新。
如果您需要在应用程序中出于某种原因捕获此类事件,您可以尝试从资源Locale
对象获取Configuration
,即
Locale current = getResources().getConfiguration().locale;
如果您的应用程序需要更改设置,您可能会发现更快地更新此值。
答案 1 :(得分:149)
Android N(Api等级24)更新(无警告):
None
答案 2 :(得分:31)
如果您使用的是Android支持库,则可以使用ConfigurationCompat
代替@ Makalele的方法来删除弃用警告:
Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);
或在Kotlin:
val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]
答案 3 :(得分:14)
来自getDefault
的文档:
返回用户首选的语言环境。可能已使用setDefault(Locale)覆盖了此过程。
同样来自Locale
文档:
默认语言环境适用于涉及向用户显示数据的任务。
好像你应该使用它。
答案 4 :(得分:1)
以上所有答案-不起作用。 因此,我将在此处放置适用于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();
}
}
答案 5 :(得分:1)
我用过这个:
String currentLanguage = Locale.getDefault().getDisplayLanguage();
if (currentLanguage.toLowerCase().contains("en")) {
//do something
}
答案 6 :(得分:0)
private Locale getLocale(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;
}
}
答案 7 :(得分:0)
根据官方documentation, ConfigurationCompat 在支持库中已弃用
您可以考虑使用
LocaleListCompat.getDefault()[0].toLanguageTag()
第0位是用户首选的语言环境
要在第0个位置获得默认语言环境,是
LocaleListCompat.getAdjustedDefault()
答案 8 :(得分:0)
至于现在,我们可以使用 ConfigurationCompat
类来避免警告和不必要的样板。
Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);