不推荐使用Android context.getResources.updateConfiguration()就在最近的context.getResources()。updateConfiguration()已在Android API 25中弃用,建议使用上下文。而是createConfigurationContext()。有谁知道createConfigurationContext如何用于覆盖android系统区域设置?在此之前将通过以下方式完成:Configuration config = getBaseContext().getResources().getConfiguration();config.setLocale(locale);context.getResources().updateConfiguration(config,
context.getResources().getDisplayMetrics());
3 回答

12345678_0001
TA贡献1802条经验 获得超5个赞
可能是这样的:
Configuration overrideConfiguration = getBaseContext().getResources().getConfiguration();overrideConfiguration.setLocales(LocaleList);Context context = createConfigurationContext(overrideConfiguration);Resources resources = context.getResources();
奖励:使用createConfigurationContext()的博客文章

犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
受书法和Mourjan以及我自己的启发,我创造了这个。
首先,您必须创建Application的子类:
public class MyApplication extends Application { private Locale locale = null; @Override public void onCreate() { super.onCreate(); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); Configuration config = getBaseContext().getResources().getConfiguration(); String lang = preferences.getString(getString(R.string.pref_locale), "en"); String systemLocale = getSystemLocale(config).getLanguage(); if (!"".equals(lang) && !systemLocale.equals(lang)) { locale = new Locale(lang); Locale.setDefault(locale); setSystemLocale(config, locale); updateConfiguration(config); } } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (locale != null) { setSystemLocale(newConfig, locale); Locale.setDefault(locale); updateConfiguration(newConfig); } } @SuppressWarnings("deprecation") private static Locale getSystemLocale(Configuration config) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { return config.getLocales().get(0); } else { return config.locale; } } @SuppressWarnings("deprecation") private static void setSystemLocale(Configuration config, Locale locale) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { config.setLocale(locale); } else { config.locale = locale; } } @SuppressWarnings("deprecation") private void updateConfiguration(Configuration config) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { getBaseContext().createConfigurationContext(config); } else { getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); } }}
那么你需要将它设置为AndroidManifest.xml应用程序标签:
<application ... android:name="path.to.your.package.MyApplication" >
并将其添加到AndroidManifest.xml活动标记中。
<activity ... android:configChanges="locale" >
请注意pref_locale是一个字符串资源,如下所示:
<string name="pref_locale">fa</string>
如果未设置pref_locale,则硬编码“en”为默认值
没有找到匹配的内容?试试慕课网站内搜索吧
- 3 回答
- 0 关注
- 1454 浏览
添加回答
举报
0/150
提交
取消