我有一个活动,在 onCreate 我从首选项加载语言并设置这样的语言环境:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String lang = PreferenceManager.getDefaultSharedPreferences(this).getString("locale", "en");
Locale newLocale = new Locale(lang);
Locale.setDefault(newLocale);
Configuration config = new Configuration();
config.locale = newLocale;
final Resources res = getResources();
res.updateConfiguration(config, res.getDisplayMetrics());
}
我也覆盖 onConfigurationChanged
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
String lang = PreferenceManager.getDefaultSharedPreferences(this).getString("locale", "en");
Locale newLocale = new Locale(lang);
Locale.setDefault(newLocale);
Configuration config = new Configuration();
config.locale = newLocale;
final Resources res = getResources();
res.updateConfiguration(config, res.getDisplayMetrics());
}
我有一个带有 FragmentPagerAdapter 的 ViewPager 和 android 2.3.7 上的三个选项卡。问题是,有时在切换选项卡时,应用程序的区域设置会恢复为英语,因此从现在开始 UI 会混合使用多种语言。我总是在适配器的 getItem() 方法中为选项卡创建新片段。如果我旋转设备,则区域设置再次正确。
我还尝试将 android:configChanges="locale" 放在清单中,而不是覆盖 onConfigurationChanged(),但结果是一样的。
最糟糕的是,它不是 100% 可重现的,它只会发生几次,而且我也收到了来自用户的报告。一旦应用程序启动并且在切换几个选项卡后它不会更改区域设置,那么它将正确直到退出。