我是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
答案 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);
}
}
在首选项中设置语言,例如en
,ar
,it
当您更改语言时,不要忘记重新启动应用程序。