2010-02-24 7 views
16

J'essaie de forcer les paramètres régionaux de mon application à l'un d'eux. Comme cela peut être utilisé pour des démonstrations, je veux changer la langue/les paramètres régionaux dans l'application et non à tout moment pour l'ensemble de l'appareil. J'ai regardé autour de SO et j'ai essayé d'utiliser tous les indices que j'ai trouvés ici. Le résultat: Je peux redémarrer mon activité de test avec la nouvelle langue, mais si je change d'orientation, les paramètres régionaux seront toujours réinitialisés sur le périphérique.Android - Réinitialisation forcée des paramètres régionaux sur les changements d'orientation

I uploaded a minimalistic project afin que vous puissiez reproduire mon problème. S'il vous plaît ignorer le rétrécissement de l'interface utilisateur, ce n'est pas important :)

Répondre

2

La réinitialisation des paramètres régionaux se produit-elle parce que votre activité est en cours de redémarrage lors du changement d'orientation?

Si oui, vous pouvez intercepter ou empêcher l'orientation change: Activity restart on rotation Android

+0

I « restart » mon activité avec finition() et startActivity() pour forcer le rechargement de l'interface utilisateur qui utilise les nouveaux paramètres régionaux.Le changement d'orientation réinitialise toujours mes paramètres régionaux – WarrenFaith

3

Je viens de voir votre code.

Vérifiez que le Locale que vous utilisez provient de java.util et non d'android. Votre code ne changera pas les paramètres régionaux du téléphone portable.

Pour le tester:

  • Je mis mon téléphone à l'espagnol.
  • Ouvrez votre application
  • cliquez sur le bouton
  • aller à la maison
  • icônes étaient en espagnol au lieu de l'anglais.

Si ce que vous essayez de faire est la mise en juste une version localisée à un défaut et d'être en mesure de voir la même valeur après une rotation de l'écran:

Au lieu de:

android:configChanges="locale" 

utilisation:

android:configChanges="locale|orientation" 
9

Cet extrait de code fait ce que vous avez besoin de savoir je l'ai testé. Supposons pour l'exemple que vous voulez que l'utilisateur puisse changer de langue via un menu de votre activité principale. Vous pouvez le faire grâce à l'enregistrement d'un drapeau de la langue comme une préférence utilisateur et vérifiez sur « onCreate() » et « onConfigurationChanged() » comme suit:

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

Vous devriez forcer vos paramètres régionaux dans Application :: onCréer et Application :: onConfigurationChanged. Ne pas oublier d'inscrire votre classe d'application dans AndroidManifest.xml

3

Ce qui a fonctionné pour moi donne le lieu juste avant que vous gonflez vos mises en page:

@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); 

    ... 

} 
Questions connexes