在“onResume”方法后更改语言环境不起作用?

罗伯特

我有一个应用程序(或多或少)被翻译成其他语言。为此,我使用locale并保存了我使用的用户首选的语言SharedPreferences

使用它,我设法在应用程序内的任何/每个活动上加载首选语言。

     @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pick);

    findViewById(R.id.flagcollection).setVisibility(View.GONE);

    findViewById(R.id.worldmapswitch)
            .setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    if (flagWorld) {
                        // means true
                        findViewById(R.id.flagcollection).setVisibility(View.GONE);
                        flagWorld = false;
                    } else {
                        findViewById(R.id.flagcollection).setVisibility(View.VISIBLE);
                        flagWorld = true;
                    }
                }
            });

    preferences = getSharedPreferences("settings_values", MODE_PRIVATE);

    String SavedLocaleLang = preferences.getString("LocalLang", null);
    Locale locale = new Locale(SavedLocaleLang);
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getResources().updateConfiguration(config, getResources().getDisplayMetrics());
....

问题是,如果我出于任何原因离开应用程序(不是退出/结束活动),一段时间后当我返回应用程序时,它会使用 PHONE 的默认语言而不是区域设置的保存值运行。

然后,在阅读了许多关于 onResume 奇迹的帖子后,结合我的 Java 无技能,我尝试了这个:

@Override
public void onResume(){
    super.onResume();
    // put your code here...

    preferences = getSharedPreferences("settings_values", MODE_PRIVATE);

    String SavedLocaleLang = preferences.getString("LocalLang", null);
    Locale locale = new Locale(SavedLocaleLang);
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getResources().updateConfiguration(config, getResources().getDisplayMetrics());


}

我以为我已经解决了我的问题,但是在不到 1 小时内测试了结果后,我意识到我什么也没做(至少没有什么好处)。某处我做错了什么。

如果有人有技能、耐心和很多善意,请帮助我了解我做错了什么以及哪里做错了。

任何帮助将不胜感激!不过,请不要讽刺。在那里我做得很好:P

谢谢你 !!!

PS 用户“Cochi”请求在 Prefereces 中保存区域设置的代码......所以你去:

findViewById(R.id.flaghungary)
            .setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String localeHU = "hu";
                    SharedPreferences settings = getSharedPreferences("settings_values", MODE_PRIVATE);
                    SharedPreferences.Editor editor = settings.edit();
                    editor.putString("LocalLang", localeHU);
                    editor.apply();

                    Locale locale = new Locale("hu");
                    Locale.setDefault(locale);
                    Configuration config = new Configuration();
                    config.locale = locale;
                    getResources().updateConfiguration(config, getResources().getDisplayMetrics());
                    setContentView(R.layout.activity_pick);
                    Context context = getApplicationContext();
                    Toast.makeText(context, "Magyar nyelv kiválasztva", Toast.LENGTH_SHORT).show();
                    recreate();
                }


            });
尼卡·库尔达泽

尝试将该代码放入 中onCreate,在 之前setContentView

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    String SavedLocaleLang = preferences.getString("LocalLang", null);
    Locale locale = new Locale(SavedLocaleLang);
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getResources().updateConfiguration(config, getResources().getDisplayMetrics());

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章