我想用两种语言展示android应用程序,但我的应用程序并不是从用户选择的语言开始的。我的默认应用程序语言是"英语",当用户更改"语言设置"时,我想用"缅甸语"启动应用程序。我该怎么办?
据我所知,用户更改设备语言,您希望应用程序遵循该语言
这一行将为您提供设备语言,以便您的应用程序可以在支持的语言之间切换。
Locale.getDefault().getLanguage();
我不理解语言设置部分,是用户可以从应用程序本身更改应用程序语言吗?
如果否-
您可以通过Locale.getDefault().getLanguage();
找到默认语言
如果是-
保存用户在SharedPreference中选择的语言,如果用户选择了英语显示英语内容或缅甸语。
试试这个。。。
- 首先编写本地共享首选项类来存储区域设置值
LocalSharedManager.java
public class LocalSharedManager {
Context context;
SharedPreferences sharedPreferences;
public LocalSharedManager(Context context) {
this.context = context;
sharedPreferences = context.getSharedPreferences("pref",
Context.MODE_PRIVATE);
}
public SharedPreferences getGcmPreferences() {
return sharedPreferences;
}
public String GetValueFromSharedPrefs(String KeyName) {
return sharedPreferences.getString(KeyName, "");
}
public String SaveValueToSharedPrefs(String KeyName, String value) {
Editor editor = sharedPreferences.edit();
editor.putString(KeyName, value);
editor.commit();
return true;
}
}
- 你的主要活动
MainActivity.java
public class MainActivity extends Activity
{
private RadioGroup radioGroup;
private RadioButton english;
private RadioButton burmese;
private LocalSharedManager mgr;
private Configuration config;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mgr = new LocalSharedManager(MainActivity.this);
radioGroup = (RadioGroup) findViewById(R.id.radioChoice);
english=(RadioButton)findViewById(R.id.radioEnglish);
burmese=(RadioButton)findViewById(R.id.radioBurmese);
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(RadioGroup group, int checkedId)
{
// do whatever
if(english.isChecked())
{
// Do the UI changes for English.
Toast.makeText(MainActivity.this,"English", Toast.LENGTH_SHORT).show();
ChangeLocale();
}
else if(burmese.isChecked())
{
// Do the UI changes for Burmese.
Toast.makeText(MainActivity.this,"Burmese", Toast.LENGTH_SHORT).show();
ChangeLocale();
}
}
});
}
/**
* Method that use change locale type to English or Arabic.
*/
public void ChangeLocale() {
String lang = mgr.GetValueFromSharedPrefs("App_Locale");
if (lang.equalsIgnoreCase("")) {
//default
changeEnglish();
} else {
if (lang.equalsIgnoreCase("MY")) {
changeBurmese();
} else {
changeEnglish();
}
}
}
public void changeBurmese() {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
String app_locale = "my";
Locale locale = new Locale(app_locale);
Locale.setDefault(locale);
config = new Configuration();
config.locale = locale;
getResources().updateConfiguration(config,
getResources().getDisplayMetrics());
//save selected locale in preference
mgr.SaveValueToSharedPrefs("App_Locale", app_locale);
//refresh activity here.
Intent i = getActivity().getIntent();
startActivity(i);
getActivity().finish();
return null;
}
}.execute();
}
public void changeEnglish() {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
String app_locale = "en";
Locale locale = new Locale(app_locale);
Locale.setDefault(locale);
config = new Configuration();
config.locale = locale;
getResources().updateConfiguration(config,
getResources().getDisplayMetrics());
//save selected locale in preference
mgr.SaveValueToSharedPrefs("App_Locale", app_locale);
//refresh activity here.
Intent i = getActivity().getIntent();
startActivity(i);
getActivity().finish();
return null;
}
}.execute();
}
}