为了账号安全,请及时绑定邮箱和手机立即绑定

不推荐使用Android context.getResources

不推荐使用Android context.getResources

泛舟湖上清波郎朗 2019-07-24 19:07:15
不推荐使用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()的博客文章


查看完整回答
反对 回复 2019-07-24
?
犯罪嫌疑人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”为默认值


查看完整回答
反对 回复 2019-07-24

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号