tôi có một hoạt động và trong onCreate i tải ngôn ngữ từ sở thích và thiết lập một miền địa phương như thế này:android locale thay đổi một cách ngẫu nhiên trở lại để mặc định
@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());
}
tôi cũng ghi đè 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());
}
tôi có một ViewPager với FragmentPagerAdapter và ba tab trên Android 2.3.7. vấn đề là, đôi khi khi chuyển đổi tab, miền địa phương của ứng dụng được hoàn nguyên về tiếng Anh, do đó giao diện người dùng có ngôn ngữ hỗn hợp từ bây giờ trở đi. tôi luôn tạo các mảnh mới cho các tab trong phương thức getItem() của adapter. nếu tôi xoay thiết bị, miền địa phương lại đúng.
tôi cũng đã thử đặt android: configChanges = "locale" trong tệp kê khai và không ghi đè trênConfigurationChanged(), nhưng kết quả là như nhau.
điều tồi tệ nhất là, nó không phải là 100% tái sản xuất, nó sẽ xảy ra chỉ một số lần và tôi cũng có báo cáo từ người dùng về việc này. một khi ứng dụng bắt đầu và nó không thay đổi ngôn ngữ sau khi chuyển đổi vài tab, sau đó nó sẽ chính xác cho đến khi thoát.