Я пытаюсь предоставить языковые настройки (английский, традиционный китайский и упрощенный китайский) в приложении для Android, но при изменении языкового предпочтения приложение не имеет каких-либо изменений, оно все еще показывает такой же язык. Я упомянул аналогичные вопросы в stackoverflow, но я до сих пор не знаю, где моя проблема. Я хотел бы найти некоторые подсказки для обнаружения ошибок. Большое вам спасибо за вашу помощь!Изменение настроек языка приложения с использованием PreferenceFragment
public class AppPrefActivity extends Activity {
private SharedPreferences.OnSharedPreferenceChangeListener prefListener;
SharedPreferences pref;
public static final String PREF_LANGUAGE = "language_pref";
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragement()).commit();
}
public static class PrefsFragement extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener{
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference);
}
@Override
public void onResume() {
super.onResume();
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
super.onPause();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if(key.equals(PREF_LANGUAGE))
{
Preference connectionPref = findPreference(key);
connectionPref.setSummary(sharedPreferences.getString(key, ""));
changeLanguagePref(sharedPreferences.getString(key, ""));
}
}
private void changeLanguagePref(Context context, String lang){
Locale locale = null;
if (lang.equals("Traditional Chinese")){
locale = new Locale("zh");//("zh_rTW");
}else if (lang.equals("Simplified Chinese")){
locale = new Locale("zh");//("zh_rCN");
}else{
locale = new Locale("en");
}
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
context.getResources().updateConfiguration(config, null);
}
}
}
AndroidManifest.xml настройки массива
<activity
android:name=".AppPrefActivity"
android:label="AppPrefActivity"
android:configChanges="locale">
<intent-filter>
<action android:name="com.proj.george.betslog.AppPrefActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Привилегированные
<string-array name="app_language">
<item>Traditional Chinese</item>
<item>Simplified Chinese</item>
<item>English</item>
</string-array>
Краткое примечание: Я думаю, вам необходимо перезагрузить фрагмент (или перейти на другой фрагмент/действие), чтобы просмотреть изменения. Если я правильно помню, он не изменится автоматически. –
Вы имеете в виду добавление «getPreferenceScreen(). GetSharedPreferences(). RegisterOnSharedPreferenceChangeListener (this);" в методе onCreate? – George