Используйте приведенный ниже код, вот как я добился этого в моем случае, вы также можете попробовать:
я есть многоязычное приложение с основным языком английский и дополнительный язык арабский.
я звонюsetLocale()
вonCreate()
каждогоActivity
в моем приложении:
public static void setLocale(Locale locale){
Locale.setDefault(locale);
Context context = MyApplication.getInstance();
final Resources resources = context.getResources();
final Configuration config = resources.getConfiguration();
config.setLocale(locale);
context.getResources().updateConfiguration(config,
resources.getDisplayMetrics());
}
гдеlocale
является одним из следующих:
Вышеуказанный метод называетсядо super.onCreate(savedInstanceState)
вызывается.
Как описано вдокументация,
я добавилandroid:supportsRtl="true"
в манифесте.Я изменил все свойства XML сleft
а такжеright
приписываетstart
а такжеend
соответственно.Я поместил строки на арабском языке вres\values-ar\strings
папка и нарисованные ресурсы вres\drawable-ar
папка (и аналогично для других ресурсов).Вышеуказанная настройка работает правильно. После измененияLocale
вar-AE
, Арабский текст и ресурсы правильно отображаются в моей деятельности.
Однако существует проблема с ресурсами и направлением расположения для всех устройств Android с версией.8,0 и выше.
На устройстве с версией менее 8.0 экран RTLправильно выглядит так:
И на всех устройствах с 8.0+ один и тот же экран выглядит так:
которыйнеправильно.
Оказывается, что и направление, и ресурсы отображаются неправильно.
Естьдва проблемы здесь:
ПравильноLocale
похоже, не обновляется в конфигурации приложения.Направление текста и рисования противоположно тому, что должно быть.Что касается направления, любопытный метод называетсяsetLayoutDirection()
существует, чего я раньше не замечал.
Я хотел бы знать, что это за проблема, почему она происходит в Oreo и как ее решить. Пожалуйста, помогите / прокомментируйте это.
РЕДАКТИРОВАТЬ:
СогласноОтчет о различиях API,updateConfiguration()
метод действительно устарел в Android 7.1 (уровень API 25).
Также найдены все соответствующие посты по этому вопросу. В порядке важности:
1. Android N меняет язык программно.
2. Android context.getResources.updateConfiguration () устарел.
3. Как изменить язык приложения Android O / Oreo / api 26.
4. Android RTL проблема в API 24 и выше при изменении локали
5. Изменить язык программно (Android N 7.0 - API 24).