2

アプリのロケールに問題があります。つまり、基本的に私のアプリは英語とベトナム語の 2 つの言語をサポートしており、ユーザーは表示する言語を変更することを選択できます。だから私はSettingActivityこのようなものを持っています:

public class SettingsActivity extends SherlockPreferenceActivity implements OnPreferenceChangeListener{
    private ListPreference langPref;
    private SharedPreferences languagepref;
    private String language;
    private Locale locale;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    languagepref = PreferenceManager.getDefaultSharedPreferences(this);               
    Configuration config = getBaseContext().getResources().getConfiguration();
    language = languagepref.getString("languageToLoad","en");
    locale = new Locale(language);
    Locale.setDefault(locale);
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

    addPreferencesFromResource(R.xml.preferences_login);

    langPref = (ListPreference) findPreference("lang_pref");
    if (language.equalsIgnoreCase("vi")){
        langPref.setValueIndex(1);
    }
    else{
        langPref.setValueIndex(0);
    }
    langPref.setOnPreferenceChangeListener(this);
}


@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
    String key = preference.getKey();
    if (key.equals("lang_pref")){
        String languageToLoad  = (String) newValue;
        Locale locale = new Locale(languageToLoad);  
        Locale.setDefault(locale); 
        Configuration config = new Configuration(); 
        config.locale = locale; 
        getBaseContext().getResources().updateConfiguration(config,  
        getBaseContext().getResources().getDisplayMetrics());

        SharedPreferences.Editor editor = languagepref.edit();
        editor.putString("languageToLoad",languageToLoad );
        editor.commit();
        recreate();     
    }
    return false;
}
}

onCreate他のすべてのアクティビティでは、メソッドにこれを追加します。

SharedPreferences languagepref = PreferenceManager.getDefaultSharedPreferences(this);               
        Configuration config = getBaseContext().getResources().getConfiguration();
        String language = languagepref.getString("languageToLoad","en");
        Locale locale = new Locale(language);
        Locale.setDefault(locale);
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

そして今、私のアプリは奇妙な動作をしています: では、アクティビティのマニフェストSettingActivityを追加する必要がなくても、デバイスを回転させるたびに言語が適切に表示されます。android:configChanges="locale"ただし、他のすべてのアクティビティでは、デバイスを回転させると言語が英語に戻ります。android:configChanges="locale"マニフェストに追加しようとしましたが、うまくいきません。また、Stackoverflow で見つかったすべてのソリューションを試しましたが、どれもうまくいかないため、基本的に無知です。私がここで犯した間違いを指摘するのを手伝ってくれる人はいますか? よろしくお願いします。

4

1 に答える 1

0

追加してみる

android:configChanges="orientation|keyboard|keyboardHidden" 

各アクティビティのマニフェスト。

次に、アクティビティで onConfigurationChanged をオーバーライドし、このメソッドでレイアウトをリロードする必要があります (向きによって異なります)。それでもロケールに問題がある場合は、onConfigurationChanged で適切なロケールを再読み込みしてください。

于 2013-04-30T10:18:06.503 に答える