2013-03-14 58 views
4

我在一年前實現了自定義語言環境選擇,但在4.1版本發佈後,用戶開始抱怨持續活動閃爍。這裏是代碼我使用(從不同的答案SO編譯):Android 4.1+的語言環境更改後,活動閃爍

public final class TestApplication extends Application 
{ 
    private Locale desiredLocale = new Locale("ru-RU"); 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     updateLocale(new Configuration()); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) 
    { 
     super.onConfigurationChanged(newConfig); 
     updateLocale(newConfig); 
    } 

    private void updateLocale(Configuration newConfig) { 
     newConfig.locale = desiredLocale; 
     Locale.setDefault(desiredLocale); 
     getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());   
    }  
} 

應用程序只包含一個空的活動,這是由Android後,我改變設備的方向重新每一秒。 Here是樣本的來源。

它看起來像使用這種技術的所有應用程序變得無效。什麼是正確的方法?

回答

3

這一行造成的解決方案失敗:

getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics()); 

正確的(至少它的工作原理)實現此 https://stackoverflow.com/a/14010044/554336定義:

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

所以新的配置實例應該每次創建。