【发布时间】:2018-10-09 01:58:24
【问题描述】:
我是 android 应用程序开发的新手。我正在开发可以更改语言的应用程序。示例:英语到印地语或卡纳达语。语言更改在模拟器上运行良好。但是,当我在 android 手机上更改语言时,除非我将语言从设置更改为该特定语言,否则它不会改变。
我想动态更改应用程序本身的语言,而不是进入设置。这是可能的还是我们只能通过上述方式?
附: Android 手机有 7.0 Nougat
任何帮助将不胜感激。谢谢。
这是我写的。
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
【问题讨论】:
标签: android android-studio localization android-7.0-nougat