AndroidMultiLanguage icon indicating copy to clipboard operation
AndroidMultiLanguage copied to clipboard

貌似选择跟随系统无效,必须重启app

Open NeoPi opened this issue 6 years ago • 6 comments

如题

NeoPi avatar Aug 31 '18 10:08 NeoPi

在什么情况下是这样?Android系统是多少?

finddreams avatar Sep 03 '18 02:09 finddreams

8.0跟随系统也无效

freePersonal avatar Sep 05 '18 02:09 freePersonal

发现问题: 如果系统大于 7.0 不重启进程的话因为修改过 local 所以不重启获取不到原来系统的语言,需要关一下进程并重启。 那么问题又来了,因为 SP 的缓存问题他不会瞬时就把数据存储好,所以立刻杀死进程 SP 的值很可能还没有存进去,所以杀死进城前尽量做一个 500ms 左右的延时之后再做冷重启就会解决这个问题

QuincySx avatar Sep 27 '18 12:09 QuincySx

实测有效:

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;
    }

princekin-f avatar Jan 04 '19 05:01 princekin-f

LocaleListCompat.getDefault().get(0) 就可以了 暂时没发现问题

mengzhiya avatar May 05 '19 09:05 mengzhiya

分享另一种写法,这样写也有效。

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;
}

QuincySx avatar May 05 '19 09:05 QuincySx