1. 程式人生 > >Android旋轉屏幕後國際化語言失效的解決的方法

Android旋轉屏幕後國際化語言失效的解決的方法

padding lang label orien resource oca auto 切換 overflow

本文已同步至個人博客:liyuyu.cn

近期在項目中使用到了國際化多語言(英文+中文),但在使用時發現了一個問題。當屏幕旋轉後。APP語言(中文)自己主動轉換為了系統語言(英文)。設置了Activity的android:configChanges="orientation|screenSize"屬性也無效。於是求助Stackoverflow,你懂的,最後問題攻克了。於是整理了此文以作參考。

1.新建FunctionApplication類繼承Application。覆寫onConfigurationChanged。代碼例如以下:

public class FunctionApplication extends Application{
 
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        // TODO Auto-generated method stub
        super.onConfigurationChanged(newConfig);
        toChinese();
    }
 
    public void toChinese()
    {
        String languageToLoad  = "zh"; 
        Locale locale = new Locale(languageToLoad);  
        Locale.setDefault(locale);  
        Configuration config = getResources().getConfiguration();  
        DisplayMetrics metrics = getResources().getDisplayMetrics();  
        config.locale = Locale.SIMPLIFIED_CHINESE;  
        getResources().updateConfiguration(config, metrics); 
    }
}
2.改動AndroidManifest.xml文件。application節點指定為我們自己定義的FunctionApplication

 <application
        android:name="com.xxx.xxxx.FunctionApplication"
        android:allowBackup="true"
        android:configChanges="orientation|screenSize|locale"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
至此。旋轉屏幕後語言失效的問題就可攻克了。

查閱了相關資料。發如今屏幕旋轉時觸發onConfigurationChanged(Configuration newConfig)方法時。這個newConfig取的是系統的,這就是為什麽語言會切換到系統語言的原因。所以在這裏我們再次設定下locale就能夠了。


Android旋轉屏幕後國際化語言失效的解決的方法