簡體   English   中英

在Android首選項中設置應用程序語言

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM