如何添加欢迎活动以允许用户选择他的语言并更改所有活动的语言

时间:2018-01-05 11:47:22

标签: java android local startup

我正在尝试使用许多activities构建一个非常简单的应用程序。

在此应用中,我有一个WelcomeActivity,用户可以选择带有两个按钮的language,一个用于English,另一个用于Arabic,然后用户选择他的语言,语言将在所有活动中更改,此WelcomeActivity将仅首次运行,并且永远不会再显示。

任何帮助?

2 个答案:

答案 0 :(得分:0)

你可以这样做。

Locale locale = new Locale("ar”,"XX");

 private void updateLocale(locale) {
    final Configuration configuration = getResources().getConfiguration();
    Locale.setDefault(baseLocal);
    configuration.locale = baseLocal;
    getResources().updateConfiguration(configuration, getResources().getDisplayMetrics());
}

如何在下次启动时恢复所选语言。 [最好将它存储在共享偏好中。]我希望你可能知道如何存储。您只需要优先存储“ar”或“en”文本。在下次启动时,您必须回读并形成Locale并传递updateLocale()方法。

您可以使用OnConfigurationChanged方法

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        Configuration configuration = getResources().getConfiguration();
        Locale.setDefault(mCurrentLocale);
        configuration.locale = mCurrentLocale;..locale from preference or latest selected.
        getResources().updateConfiguration(configuration, getResources().getDisplayMetrics());      
    }

可以从之前存储的共享首选项中读取mCurrentLocale。

在这种情况下如何以共享首选项存储语言

   final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(
                    this);
sharedPreferences().putString(KEY_STORE_CURRENT_LOCALE, language_code).commit();

在这种情况下如何从共享偏好中获取语言

        final String current = sharedPreferences.getString(KEY_STORE_CURRENT_LOCALE,
               language_code_english);

我希望这会有所帮助!

答案 1 :(得分:0)

您可以将语言值放在共享首选项中。在我的情况下,我有en和np作为英语和尼泊尔语。首先我把共享偏好中的值作为语言存储,然后我有一个lang按钮。在我的情况下,我已经重新启动了我的应用程序,因为我的用户需要从另一个api再次加载数据。然后我将共享首选项字符串附加到API。

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
            String language = preferences.getString("language","en");

            lang.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if(language.equals("en")){
                        Util.setLanguage("np");
                        Intent restartIntent = new Intent(NavDrawerActivity.this,SplashActivity.class);
                        restartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                        startActivity(restartIntent);
                        (NavDrawerActivity.this).finish();
                    }else {
                        Util.setLanguage("en");
                        Intent restartIntent = new Intent(NavDrawerActivity.this,SplashActivity.class);
                        restartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                        startActivity(restartIntent);
                        (NavDrawerActivity.this).finish();
                    }
                }
            });