android应用关闭时如何保持最后的语言?

时间:2018-06-27 02:30:14

标签: java android string android-layout

我已经制作了一个Android应用来更改语言。但是,当应用程序关闭并再次打开时,语言将恢复为默认语言。 当应用再次打开且语言是用户的最后选择时,我该怎么做?

感谢您的帮助,我真的很感激。

2 个答案:

答案 0 :(得分:1)

您需要将用户选择的语言保存到共享首选项或任何其他持久存储中,在下一次启动应用程序时,检索先前选择的语言并将其应用于应用程序。

当用户更改语言时,应完成并重新启动以应用新的语言活动,否则您需要调用该活动的 recreate()方法。

https://github.com/gunhansancar/ChangeLanguageExample/blob/master/app/src/main/java/com/gunhansancar/changelanguageexample/helper/LocaleHelper.java

将上述类复制到您的代码中。

在您的活动中,覆盖以下方法。

 @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(LocaleHelper.onAttach(base));
    }

当用户更改语言时,例如单击按钮。使用以下代码保存语言。 zh_CN 是英语的语言(iso)代码。

@Override
    public void onClick(View v) {
     LocaleHelper.persist(context,"en");
     recreate();
}

答案 1 :(得分:0)

默认情况下,每次重新启动应用程序时,应用程序的语言都会回退到设备区域设置。

为了使您的应用程序的语言与用户选择的首选项相同,您需要保留用户选择的语言。一种方法是将语言首选项存储在SharedPreference中。启动应用程序后,请优先检查该值以决定应使用哪种语言,然后相应地调整视图。

您可以执行以下操作

更改语言后,按以下方式存储值:

  

SharedPreferences.Editor编辑器= getSharedPreferences(“ MyPref”,   MODE_PRIVATE).edit(); editor.putString(“ language”,“ en”);   editor.commit();

onCreate()中检索值,如下所示:

SharedPreferences prefs = getSharedPreferences("MyPref", MODE_PRIVATE); 
String selectedLanguage = prefs.getString("language", "<enter default locale of app>");
setLocale(selectedLanguage);

最终按如下所示设置语言环境:

无活动重启:

在清单中设置android:configChanges="locale"

按如下所示更改setLocale:

private void setLocale(String lang) {
    Locale myLocale = new Locale(lang);
    Resources res = getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    Configuration conf = res.getConfiguration();
    conf.locale = myLocale;
    res.updateConfiguration(conf, dm);
    getBaseContext().getResources().updateConfiguration(conf, getBaseContext().getResources().getDisplayMetrics());
    invalidateOptionsMenu();
    onConfigurationChanged(conf);//Add this line
}

重写onConfigurationChanged():

@Override
public void onConfigurationChanged(final Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    textView.setText(<your-text>);
    //Any other UI text to change
}

或者,您可以在更改语言环境后呼叫recreate();。 这将确保您的区域设置正确更改。