Ever since I upgraded to android oreo on mobile my RTL support for application is not working. it's changing the strings to Arabic but not changing layout direction. but if I run same RTL shift to any of device lower than oreo, everything works fine. anyone else experienced this issue? is there any official statement yet about this bug and workaround?
Below is my method to change the locale
public static boolean setDefaultLocale(Context context) {
Resources resources = context.getResources();
PreferenceManager preferenceManager = PreferenceManager.getInstance();
String localLanguage = resources.getConfiguration().locale.getLanguage();
boolean isLanguageChanged = !preferenceManager.getCurrentLanguageCode().equalsIgnoreCase(localLanguage);
if (isLanguageChanged) {
Log.d("", preferenceManager.getCurrentLanguageCode());
Locale locale = new Locale(preferenceManager.getCurrentLanguageCode());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
Locale.setDefault(Locale.Category.DISPLAY, locale);
else
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
resources.updateConfiguration(config, resources.getDisplayMetrics());
((Activity) context).recreate();
}
return isLanguageChanged;
}
Thanks to @amorenew and tweaked the method in Util class to support for this strange update in oreo below is the working method you just have to call this method onResume whenever user change app language preference
Simple fix in your onCreate function add the following code: