2010-02-24 15 views
16

Próbuję wymusić ustawienia regionalne w mojej aplikacji na jednego z podanych użytkowników. Ponieważ może to służyć do demonstracji, chcę zmienić język/ustawienia regionalne w aplikacji, a nie w dowolnym momencie dla całego urządzenia.Android - Wymuszone resetowanie ustawień regionalnych przy zmianie orientacji

Rozejrzałem się wokół i próbowałem użyć każdej podpowiedzi, którą tu znalazłem. Wynik: mogę ponownie uruchomić moją aktywność testową w nowym języku, ale jeśli zmienię orientację, ustawienia regionalne zawsze zostaną zresetowane na urządzenie.

I uploaded a minimalistic project dzięki czemu można odtworzyć mój problem. Zignoruj ​​kurczenie się interfejsu użytkownika, nie jest ważne :)

Odpowiedz

2

Czy reset ustawień regionalnych występuje, ponieważ Twoja aktywność jest restartowana po zmianie orientacji?

Jeśli tak, można przechwycić lub zapobiec orientacja zmienia: Activity restart on rotation Android

+0

I „restart” Moja aktywność z wykończeniem() i startActivity(), aby wymusić przeładowanie interfejsu użytkownika, który używa nowych ustawień narodowych.Zmiana orientacji zawsze resetuje moje ustawienia narodowe – WarrenFaith

3

Widziałem tylko kod.

Sprawdź, czy używany Locale pochodzi z java.util, a nie z Androida. Twój kod nie zmieni ustawień regionalnych telefonu komórkowego.

Aby przetestować go:

  • ustawić swój telefon na hiszpański.
  • Otwórz aplikację
  • kliknij przycisk
  • iść do domu
  • Ikony były w języku hiszpańskim, a nie po angielsku.

Jeśli to, co staramy się zrobić to ustawienie Locale do domyślnie i jest w stanie zobaczyć tę samą wartość po obróceniu ekranu:

Zamiast:

android:configChanges="locale" 

użytku:

android:configChanges="locale|orientation" 
9

Ten fragment kodu zawiera to, czego potrzebujesz, przetestowałem go. Załóżmy, że na przykład chcesz, aby użytkownik mógł przełączać język za pośrednictwem menu z głównej aktywności. Można to zrobić poprzez oszczędność flagę języka jako preferencja użytkownika i sprawdzić go na „onCreate()” oraz „onConfigurationChanged()” w następujący sposób:

public class MainActivity extends Activity { 

SharedPreferences mPrefs1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mPrefs1 = PreferenceManager.getDefaultSharedPreferences(this); 
    String languageToLoad = mPrefs1.getString("languagePref", Locale.getDefault().getLanguage()); 
    Locale locale = new Locale(languageToLoad); 
    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics()); 

    setContentView(R.layout.activity_main); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    mPrefs1 = PreferenceManager.getDefaultSharedPreferences(this); 
    String languageToLoad = mPrefs1.getString("languagePref", Locale.getDefault().getLanguage()); 
    Locale locale = new Locale(languageToLoad); 
    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics()); 
    setContentView(R.layout.activity_main); 
} 

// Declaring the Menu options 
@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{  
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main_menu, menu); 
    return true; 
} 

//handle menu item selection 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    switch (item.getItemId()) { 
    case R.id.menu_switch_language: 
     String languageToLoad = getResources().getString(R.string.switch_language); 

     mPrefs1 = PreferenceManager.getDefaultSharedPreferences(this); 
     SharedPreferences.Editor editor = mPrefs1.edit(); 
     editor.putString("languagePref", languageToLoad); 
     editor.commit(); // Very important to save the preference      
     finish(); 
     startActivity(getIntent()); 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

}

2

powinien wymusić ustawienia narodowe w Aplikacja: onCreate i Aplikacja :: onConfigurationChanged. Nie zapomnij zarejestrować swoją klasę aplikacji w AndroidManifest.xml

3

co pracował dla mnie jest ustawienie locale tuż przed nadmuchać układy:

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

    String userLocale = "Wolof"; // adapt to your need 
    Locale locale = new Locale(userLocale); 
    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 

    setContentView(R.layout.my_activity); 

    ... 

} 
Powiązane problemy