首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用SharedPreferences编程改变应用程序语言和维护语言

用SharedPreferences编程改变应用程序语言和维护语言
EN

Stack Overflow用户
提问于 2020-06-14 09:24:16
回答 2查看 60关注 0票数 1

当在导航抽屉列表中单击语言名称时,我试图以编程方式更改应用程序语言。语言变化,但我无法维持当应用程序关闭。这里是我的setLocal方法

代码语言:javascript
代码运行次数:0
运行
复制
private void setLocale(String lang) {
        Locale locale = new Locale(lang);
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());

        SharedPreferences.Editor editor = getSharedPreferences(SHARED_PREFS,MODE_PRIVATE).edit();
        editor.putString(MY_LANG,lang);
        editor.apply();
    }

当我想要像这样改变朗的时候,我调用这个方法

代码语言:javascript
代码运行次数:0
运行
复制
              if (id == R.id.ar_lang){
                    setLocale("ar");
                    recreate();
                }
                if (id == R.id.eng_lang){
                    setLocale("en");
                    recreate();
                }

我在onCreate中调用这个方法来获取存储的语言,但是它不起作用。

代码语言:javascript
代码运行次数:0
运行
复制
public void loadLocale(){
        SharedPreferences prefs = getSharedPreferences(SHARED_PREFS, Activity.MODE_PRIVATE);
        String languages =  prefs.getString(MY_LANG,"");
        setLocale(languages);
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-14 10:17:36

我正在使用https://stackoverflow.com/a/34675427/519334在运行时更改应用程序语言。

我在onCreate中调用这个方法来获取存储的语言,但是它不起作用。

如果在调用loadLocale() super.OnCreate()之前已经完成了(super.OnCreate()super.OnCreate),那么我的解决方案会工作。

代码语言:javascript
代码运行次数:0
运行
复制
@Override
protected void onCreate(Bundle savedInstanceState) {
    loadLocale();
    super.onCreate(savedInstanceState);
    ... initialize
}
票数 1
EN

Stack Overflow用户

发布于 2020-06-14 09:40:34

您应该将新配置的上下文传递给您的活动。

使用这个LocaleHelper (用Kotlin编写,但也是用Java自己编写的)

然后在您的活动中调用此方法

代码语言:javascript
代码运行次数:0
运行
复制
override fun attachBaseContext(newBase: Context?) {
    super.attachBaseContext(LocaleHelper.onAttach(newBase!!))
}

override fun applyOverrideConfiguration(overrideConfiguration: Configuration?) 
{
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP 
          && Build.VERSION.SDK_INT <= Build.VERSION_CODES.N_MR1) {
        // update overrideConfiguration with your locale
        overrideConfiguration?.setLocale(LocaleHelper.getCurrentLocale(this))
        overrideConfiguration?.setLayoutDirection(LocaleHelper.getCurrentLocale(this))
    }
    super.applyOverrideConfiguration(overrideConfiguration)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62370649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档