天天看點

關于Android應用内多語言切換的問題

一般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;
    }
           

目前對多語言的切換需求接觸到的隻有以上,有其他的大家可以提出來。