[英]Set-up the application Language in Android Preferences
我希望根據用戶的喜好設置應用程序語言,但到目前為止,我的工作方式並不理想。
我已經設置了默認值:strings.xml以及使用西班牙語中的strings.xml的values-es。 我有一個菜單選項,它將用戶帶到一個Preference活動,在那里他可以選擇語言。
以下是代碼的一些摘錄:
public class Preference extends PreferenceActivity implements
OnSharedPreferenceChangeListener {
......
// Set up a listener whenever a key changes
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
...}
//(......)
//and here I have the listener so when the language pref changes value the locale gets changed.
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if (key.equals("listPref2")) {
String idioma = sharedPreferences.getString("listPref2", "catala");
if ("castella".equals(idioma)) {
idioma = "es_ES";
Locale locale = new Locale(idioma);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getApplicationContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
}
}
因此,當我更改它的語言時,但是當我稍后回來或重新啟動模擬器時,語言將返回到默認語言環境en_US,並且應用程序語言將再次更改為默認語言。 我該怎么做才能解決這個問題?
我知道我可以獲得這個偏好(我可以從我的所有活動中訪問)然后每次設置語言環境但我發現它有點重,是不是有辦法以更優雅的方式做到這一點 ?
我想要做的是,如果用戶設置語言,那么當他2天后回來時,他不必再次更改語言。
有任何想法嗎?
好吧,它可以幫助某人。 我已將以下內容添加到主要活動清單中:
android:configChanges="locale"
然后,當用戶選擇首選項時,我放置了一個確認按鈕,然后此按鈕將您帶到主要活動,這就是為什么lnagages被重置。
我有一個靜態類,我有這個代碼來更改語言環境:
public static void updateLanguage(Context context, String idioma) {
if (!"".equals(idioma)) {
if ("castella".equals(idioma)) {
idioma = "es_ES";
} else if ("catala".equals(idioma)) {
idioma = "ca_ES";
}
Locale locale = new Locale(idioma);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
context.getResources().updateConfiguration(config, null);
}
}
在每個活動結束時,我喜歡其中的20個,我之前稱之為:
setContentView(R.layout.list_event);
使用這些方法,當我旋轉屏幕時,活動不會改變語言,這是指向幫助我的博客的鏈接: http : //adrianvintu.com/blogengine/post/Force-Locale-on-Android.aspx
我認為您需要在MainActivity onCreate
方法中設置區域設置。 與onSharedPreferenceChanged
方法設置時onSharedPreferenceChanged
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.