AndroidMultiLanguage
AndroidMultiLanguage copied to clipboard
貌似选择跟随系统无效,必须重启app
如题
在什么情况下是这样?Android系统是多少?
8.0跟随系统也无效
发现问题: 如果系统大于 7.0 不重启进程的话因为修改过 local 所以不重启获取不到原来系统的语言,需要关一下进程并重启。 那么问题又来了,因为 SP 的缓存问题他不会瞬时就把数据存储好,所以立刻杀死进程 SP 的值很可能还没有存进去,所以杀死进城前尽量做一个 500ms 左右的延时之后再做冷重启就会解决这个问题
实测有效:
private Locale getSysLocale() {
Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
LocaleList localeList = LocaleList.getDefault();
int spType = CommSharedUtil.getInstance(mContext).getInt(MultiLanguageUtil.SAVE_LANGUAGE, LanguageType.LANGUAGE_FOLLOW_SYSTEM);
// 如果app已选择不跟随系统语言,则取第二个数据为系统默认语言
if (spType != 0 && localeList.size() > 1) {
locale = localeList.get(1);
} else {
locale = localeList.get(0);
}
} else {
locale = Locale.getDefault();
}
return locale;
}
LocaleListCompat.getDefault().get(0) 就可以了 暂时没发现问题
分享另一种写法,这样写也有效。
public Locale getSysLocale() {
Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
locale = Resources.getSystem().getConfiguration().getLocales().get(0);
} else {
locale = Resources.getSystem().getConfiguration().locale;
}
return locale;
}