2014-04-05 14 views
14

Ho due lingue nella mia app. valori/strings.xml e valori-ru/strings.xml Quando si modifica la lingua a livello di codice, tutte le stringhe vengono tradotte, ma il titolo dell'attività rimane invariato. Uso in tutte le attivitàProblemi con la lingua del titolo dell'attività

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

Quando seleziono la lingua, l'attività o l'applicazione viene ricaricata.

+1

questo è il mio problema troppo ... Per favore rispondere a questa. – ConductedClever

risposta

17

ho usato un altro modo che sembra stupido, ma è un lavoro

in ogni attività cercano di impostare il titolo barra delle operazioni per il titolo l'attività di file di valori

nel mio caso stavo usando sherlockactionbar

così ho aggiunto questo oncreate della mia attività productdetails

getSupportActionBar().setTitle(getResources().getString(R.string.title_activity_product_details)); 
+0

grazie mille per questo, davvero aiutato! –

+0

felice di aiutare :) – Tony

+1

Se si imposta il titolo come 'label' di Activity in AndroidManifest.xml, è possibile riutilizzarlo in questo modo:' int labelRes = getPackageManager(). GetActivityInfo (getComponentName(), 0) .labelRes; \t \t \t if (labelRes> 0) { \t \t \t \t getActionBar.setTitle (labelRes); \t \t \t} ' – GMan

3

finalmente una soluzione:


Get resouce Id del titolo della attività dal PackageManger, e impostare il titolo 's il AcionBar all'ID risorsa, questa volta perché il locale è già cambiato Android sa quale titolo l'attività di scegliere.

try{ 

    ActivityInfo activityInfo = getPackageManager().getActivityInfo(getComponentName(), 
     PackageManager.GET_META_DATA); 

    ActionBar actionBar = getActionBar(); 

    if(actionBar != null) 
     actionBar.setTitle(activityInfo.labelRes); 

}catch (PackageManager.NameNotFoundException ex){ 

    Log.e(this.getClass().getSimpleName(), 
     "Error while getting activity info. " + ex.getMessage(), ex); 

} 
+1

activity.setTitle() funziona anche. –

+0

davvero? funziona su di te cambiare anche le impostazioni locali? – dsharew

+0

Sembra. :) L'ho provato con entrambe le modifiche locali tramite il menu sys e le modifiche alle impostazioni internazionali impostando le impostazioni locali nel codice. Ho provato su un dispositivo che esegue Marshmallow utilizzando le attività appcompat e systheme. –

0

Ho fatto questo nel modo seguente e ha funzionato per me.

setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    toolbar.setTitle(resources.getString(R.string.app_name)); 
    setSupportActionBar(toolbar); 

Utilizzare questo codice dopo aver modificato la configurazione locale.

3

L'aggiunta di setTitle(R.string.activity_title) in onCreate() aggiorna il titolo dell'attività e il contenuto stesso sulle modifiche locali in Runtime.

In seguito è la semplice frammento che aggiorna il suo contenuto e il titolo di attività in Corea (ko-KR) quando fa clic sul pulsante:

public class MainActivity extends AppCompatActivity { 

    Button btnReset; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Activity title will be updated after the locale has changed in Runtime 
     setTitle(R.string.app_name); 

     btnReset = (Button) findViewById(R.id.button); 
     btnReset.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Resources resources = getResources(); 
       DisplayMetrics dm = resources.getDisplayMetrics(); 
       Configuration conf = resources.getConfiguration(); 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
        conf.setLocale(Locale.KOREA); 
       } else { 
        conf.locale = Locale.KOREA; 
       } 
       resources.updateConfiguration(conf, dm); 

       // Overwrite the default Locale 
       Locale.setDefault(Locale.KOREA); 

       // Clear the back stack then restarts the activity 
       startActivity(new Intent(MainActivity.this, MainActivity.class) 
         .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
           | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK)); 
      } 
     }); 
    } 
} 
Problemi correlati