Android应用程序中的语言没有变化

时间:2018-04-28 10:45:34

标签: android android-studio localization android-7.0-nougat

我是Android应用开发的新手。我正在开发可以更改语言的应用程序。示例:英语到印地语或卡纳达语。语言更改在模拟器上正常工作。但是,当我在Android手机上更改语言时,它不会改变,除非我将语言从“设置”更改为该特定语言。

我想在app中动态更改语言,而不是去设置。这是可能的,还是我们只能通过上述途径?

P.S。 Android手机有7.0牛轧糖

非常感谢任何帮助。感谢。

这就是我写的。

    private void setLocale(String lang){
    Locale locale=new Locale(lang);
    locale.setDefault(locale);
    Resources resources = getResources();
    Configuration configuration = resources.getConfiguration();
    DisplayMetrics displayMetrics = resources.getDisplayMetrics();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
        configuration.setLocale(locale);
    } else{
        configuration.locale=locale;
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
        getApplicationContext().createConfigurationContext(configuration);
    } else {
        resources.updateConfiguration(configuration,displayMetrics);
    }
    //save data to sharedPreferences
    SharedPreferences.Editor editor=getSharedPreferences("Settings",MODE_PRIVATE).edit();
    editor.putString("My_Lang",lang);
    editor.apply();
}

    public void showChangeLanguageDialog()
{
    final String[] listItems={"हिंदी","ಕನ್ನಡ","मराठी","தமிழ்","اردو","English"};

    AlertDialog.Builder mBuilder=new AlertDialog.Builder(MainActivity.this);
    mBuilder.setTitle("Change Language..");
    mBuilder.setSingleChoiceItems(listItems, -1, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            switch (which)
            {
                case 0: //Hindi
                    setLocale("hi");
                    recreate();
                    break;
                case 1://Kannda
                    setLocale("kn");
                    recreate();
                    break;
                case 2://English
                    setLocale("en");
                    recreate();
                    break;
            }
            //dismiss dialog when language selected
            dialog.dismiss();
        }
    });

    AlertDialog mDialog=mBuilder.create();
    //show create dialog
    mDialog.show();
}
//showChangeLanguageDialog is called on button click

1 个答案:

答案 0 :(得分:0)

BaseActivity

中的attachBaseContext中设置本地语言
    public class BaseActivity extends AppCompatActivity {

             @Override
                protected void attachBaseContext(Context newBase) {
                    String lngCode=PreferenceManager.
getDefaultSharedPreferences(context).getString(CURRENT_LANGUAGE_CODE, Locale.getDefault().getLanguage())
                    Locale newLocale = new Locale(lngCode);

                    Context context = ContextWrapperLanguage.wrap(newBase, newLocale);
                    super.attachBaseContext(context);
                }
            }

在首选项中设置语言,例如enarit

当您更改语言时,不要忘记重新启动应用程序。