1

如何刷新應用與onConfigChanges沒有鬆動的情況下

protected void onResume() { 
 
     super.onResume(); 
 

 

 
     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
 
     Configuration config = getBaseContext().getResources().getConfiguration(); 
 

 
     String lang = settings.getString("lang_list", ""); 
 
     // Log.d("Lang",lang); 
 
     if (!"".equals(lang) && !config.locale.getLanguage().equals(lang)) { 
 
      recreate(); 
 
      Locale locale = new Locale(lang); 
 
      Locale.setDefault(locale); 
 
      config.locale = locale; 
 
      getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
 
     } 
 

 
     if (AppController.getInstance().isPreferenceChanged()) { 
 
      setupViewPager(viewPager); 
 
      adapter.notifyDataSetChanged(); 
 
     } 
 
    }

我想改變應用程序的語言,而不重新創建應用程序。我的意思是,當用戶從設置中選擇任何語言時,我想要這樣做,然後它應該更改設置活動語言,而不使用recreate();,因爲當我使用recreate();時,它會使應用程序閃爍一次。所以我不使用recreate();。相反,我寫了下面的代碼在制定活動在AndroidManifest.xml

<activity 
      android:name=".activity.SettingsActivity" 
      android:label="@string/title_activity_settings" 
      android:configChanges="orientation|keyboardHidden|screenSize|locale|layoutDirection"/> 

如下面的截圖可以看到,我選擇了「印地文」的語言,但它沒有更新的活動,以印地文。我的意思是「選擇國家」,「選擇您的語言」和「選擇類別」應以印地語而不是英語顯示。我已經寫了兩種語言的字符串。

是否有人知道在更改語言時如何更改它? 或 爲什麼onConfigChanges不適用於區域設置,因爲它是爲Orientation工作的。

謝謝!

enter image description here

回答

0

在上在onStart回調您的MainActivity調用sharedPrefrences insted的調用的onCreate

例: -

protected void onStart() { 
    SharedPreferences sharedPreferences = this.getSharedPreferences("selectedLanguage", Context.MODE_PRIVATE); 
    String pine = sharedPreferences.getString("language", DEFAULT); 
    String languageToLoad = pine; 
    Locale locale = new Locale(languageToLoad);//Set Selected Locale 
    Locale.setDefault(locale);//set new locale as default 
    Configuration config = new Configuration();//get Configuration 
    config.locale = locale;//set config locale as selected locale 
    this.getResources().updateConfiguration(config, this.getResources().getDisplayMetrics()); 
    invalidateOptionsMenu(); //This changes language in OptionsMenu too 
    setTitle(R.string.app_name); //calling app name according to language selected by user 
    super.onStart(); 
} 
+0

什麼都沒有發生...... :( –

+0

我需要更改活動語言,因爲我選擇另一種語言....所有應用程序應自動更改爲選定的語言... –

+0

發佈您的微調代碼。 – Queendevelopers

0

您可以使用一個單獨的類將處理語言的變化,無需重新啓動活動,

public class MyApplication extends Application 
{ 
    private Locale locale = null; 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) 
    { 
     super.onConfigurationChanged(newConfig); 
     if (locale != null) 
     { 
      newConfig.locale = locale; 
      Locale.setDefault(locale); 
      getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics()); 
     } 
    } 

    @Override 
    public void onCreate() 
    { 
     super.onCreate(); 

     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 

     Configuration config = getBaseContext().getResources().getConfiguration(); 

     String lang = settings.getString(getString(R.string.pref_locale), ""); 
     if (! "".equals(lang) && ! config.locale.getLanguage().equals(lang)) 
     { 
      locale = new Locale(lang); 
      Locale.setDefault(locale); 
      config.locale = locale; 
      getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
     } 
    } 
} 
+0

不適用於我... :( –

+0

您是否在清單「name」標記中添加了MyApplication? –

+0

是..... @ Prokash –

相關問題