2012-12-23 27 views
1

我們在Application對象onCreate方法中有一些代碼,用於更改ApplicationContext配置中的默認本地。android bug或配置對象的誤用?

它看起來是這樣的:

Locale locale = new Locale(sSavedLocale); 
Locale.setDefault(locale); 
Configuration config = new Configuration(); 
config.locale = locale; 
getResources().updateConfiguration(config, getResources().getDisplayMetrics()); 

比我們開始我們的主要活動,並從那裏我們的其他活動和任務。 只要我不會導致像屏幕旋轉一樣的配置變化一切都好。 如果我旋轉屏幕的語言環境返回到設備默認,即使應用程序對象保持不變。

挖掘ActivityThread和其他內部類的android srouce代碼我可以看到ApplicationContext本身,並且mainThread中的上下文在配置更改事件中更改回默認值。

這似乎是因爲二我的錯誤設定在應用程序中的應用程序級的配置開始我可能要保持,除非發生本地配置變化的變化,甚至然後....

我沒有」檢查是否有開放的錯誤,我認爲應用一個。 任何人都認爲我錯了,這是好行爲?

回答

4

您可以將onConfigurationChanged添加到Application類中。

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

有趣的是,我會檢查並回復你! 10x! 我仍然認爲這是一個錯誤,我改變當前上下文的配置,它不會被保存,onConfigurationChanged將被調用,據我所知在任何情況下,所以也許你是正確的,這是執行更改。 – codeScriber

+0

該方法的工作原理,我不知道爲什麼,應用程序可能會在活動前得到改變,所以我可以集中在一個地方的變化,沒關係,它運作良好:-) – codeScriber