2014-01-13 20 views
6

In meiner App habe ich ein spezielles Menü, wo ich Anwendungssprache ändern kann.Ich bekomme Etiketten von Projekt-API (durch Parsen von JSON) und Projektwerte xml.Kann ich ändern Android-Sprache ohne Neustart der Anwendung und сhangibg Systemsprache.Ändern android application language

Antwort

7

Fügen Sie diese Methode ein und rufen Sie sie auf, um die Sprache zu ändern.

private void setLocale (String localeCode , Bundle b){ 
    Log.d(TAG+"set location function: "+localeCode); 
    locale = new Locale(localeCode); 
    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
    getApplicationContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
    UserDetail.this.getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
    onCreate(null); 
} 

Auf Toggle-Änderung oder jede Auswahl Anruf Wert wie folgt aus:

setLocale("en-us",savedInstanceStat); // for english 
setLocale("ar",savedInstanceStat); // for arabic 
+0

'OnCreate (null)' wird Ursache Ausnahme. Sie müssen 'repreate()' aufrufen; –

3

können Sie die Umschalttaste verwenden, um die Sprache zu ändern und die ausgewählte Sprache programmatisch in Ihrer App einzustellen, ohne die App zu schließen.

1.überprüfen Sie, welche Sprache ausgewählt ist?

String prefsToogleStr = getSharePrefrenceLocale(); 
     Log.d("tag", "CtrlDashBoard prefsToogleStr" + prefsToogleStr); 
     if (prefsToogleStr.equalsIgnoreCase("en")) { 
      toggleLocaleButton.setChecked(true); 
      CommonMethod.setLocale("en", viewDashBoard); 
     } else { 
      CommonMethod.setLocale("ur", viewDashBoard); 
      toggleLocaleButton.setChecked(false); 
     } 

////////////////////////////////////////

public String getSharePrefrenceLocale() { 

     SharedPreferences prefs = viewDashBoard.getSharedPreferences(
       viewDashBoard.getPackageName(), ViewDashBoard.MODE_PRIVATE); 

     return prefs.getString("locale", "en"); 
    } 

2.Ändern Sprache in Umschaltknopf Kontrollwechsel Hörer:

// Locale Toogle 
     toggleLocaleButton 
       .setOnCheckedChangeListener(new OnCheckedChangeListener() { 

        @Override 
        public void onCheckedChanged(CompoundButton buttonView, 
          boolean isChecked) { 
         if (buttonView.isChecked()) { 
          setSharePrefrenceLocale("en"); 
          CommonMethod.setLocale("en", viewDashBoard); 
         } else { 

          setSharePrefrenceLocale("ur"); 
          CommonMethod.setLocale("ur", viewDashBoard); 

         } 
         dialog.dismiss(); 
        } 
       }); 

    } 

//////////////////////////// ////////

public void setSharePrefrenceLocale(String locale) { 
     SharedPreferences prefs = viewDashBoard.getSharedPreferences(
       viewDashBoard.getPackageName(), ViewDashBoard.MODE_PRIVATE); 
     Editor editor = prefs.edit(); 
     editor.putString("locale", locale); 
     editor.commit(); 
    } 

///////// /////////////////////////////

Haupt Methode: Aufruf

public static void setLocale(String localeName, Context context) { 
    Locale locale = new Locale(localeName); 
    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    context.getResources().updateConfiguration(config, 
      context.getResources().getDisplayMetrics()); 
} 

Ich hoffe, Sie verstehen .this ist nützlich für dich.

+0

Hey Dank dafür teilen, aber es hilft nichts, was auch bei einem Neustart des App – Tony