一般Android多語言的切換,是通過在不同的語言環境下加載不同的資源。在不同的res/value-xx下放置不同語言的strings.xml實作字元的本地化,而這個value-xx目錄的選擇是根據Resource中的Configuration.Locale這項的值來決定的。這裡說明除了一般切換外遇到的另外兩種情況。
1.需求:不根據Android系統的Locale配置來改變應用的語言。這裡我們可以直接調用Android開放的接口:
public static void alterSystemLanguage(Context context, String language) {
if (context == null || TextUtils.isEmpty(language)) {
return;
}
Resources resources = context.getResources();
Configuration config = resources.getConfiguration();
if (Locale.SIMPLIFIED_CHINESE.getLanguage().equals(language)) {
config.locale = Locale.SIMPLIFIED_CHINESE;
} else {
config.locale = new Locale(language);
}
resources.updateConfiguration(config, null);
}
2.需求:應用不随系統字型的改變而改變。這樣也能避免當字型變大或者變小時對布局的影響,這裡隻需要重寫getResources()方法即可。
@Override
public Resources getResources() {
Resources res = super.getResources();
Configuration config = new Configuration();
config.setToDefaults();
res.updateConfiguration(config, res.getDisplayMetrics());
return res;
}
目前對多語言的切換需求接觸到的隻有以上,有其他的大家可以提出來。