Используйте приведенный ниже код, вот как я добился этого в моем случае, вы также можете попробовать:

я есть многоязычное приложение с основным языком английский и дополнительный язык арабский.

я звоню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).

6. Android N - изменить локаль во время выполнения.

7. Ошибка верстки RTL в Android Oreo.

Ответы на вопрос(5)

Ваш ответ на вопрос