切換語言時直接修改 Configuration 可能導致部分裝置佈局縮放異常。封裝統一設定方法,正確更新 DisplayMetrics。
public static void setDefaultLocale(Context context, String languageCode) {
Locale locale = new Locale(languageCode);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
}
// 切換至中文
setDefaultLocale(getApplicationContext(), "zh");
startActivity(new Intent(this, MainActivity.class));
finish(); // 重啟當前 Activity 生效
private void switchLanguage(int lang) {
String code;
switch (lang) {
case 1: code = "es"; break; // 西班牙文
case 2: code = "en"; break; // 英文
default: code = "zh"; break; // 中文
}
setDefaultLocale(getApplicationContext(), code);
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
recreate() 或 finish()+startActivity)。Configuration 新實例而非修改系統配置,避免副作用。createConfigurationContext。