Ошибка андроида в загрузке "layout-ldltr" layout против "layout-ldrtl" после изменения ориентации?

Сала.

В моем проекте я должен создать как layout-ldltr а также layout-ldrtl макеты для Right-To-Left а также Left-To-Right языки.

Я запускаю приложение для языка справа налево, и все хорошо. Но когда ориентация изменилась, Android загружается layout-ldltr макет против layout-ldrtlхотя текущий Locale установлен язык RTL!!!

Как можно решить эту проблему?!

В AndroidManifest.xml

<application
    android:name=".QuranApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

В layout-ldrtl\activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layoutDirection="rtl">

<include layout="@layout/toolbar" />

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:layoutDirection="rtl">

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layoutDirection="rtl"/>

    <include
        layout="@layout/list_view"
        android:layout_width="@dimen/drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start" />
</android.support.v4.widget.DrawerLayout>

ОБНОВИТЬ

После комментария @JohanShogun я меняю android:layoutDirection="rtl" в android:layoutDirection="locale"и проблема решена для большинства предметов.

На первом фото все элементы показаны очень хорошо:

Книжная ориентация

В ландшафтном режиме, в представлении списка StickyListHeader в элементе заголовка, который торчит в верхней части экрана, Android используется из макета ltr!!!:

Lanscape ориентация

1 ответ

Решение

Если у вас есть папка с layout-land, она будет принимать президент по layout-ldrtl и т. Д. Возможно, вам потребуется создать папки для layout-land-ldrtl и так далее.

Другой способ обработки макетов справа налево и слева направо - сохранить один файл макета, который написан для работы с обеими версиями.

На LinearLayout и т. Д. Есть атрибут:

android:layoutDirection

Вы можете установить это значение "Locale", и ваши горизонтальные макеты будут отображаться в обратном порядке.

Вместо того, чтобы использовать align_left/align_right а также gravity_left/gravity_right использовать вместо align_start/align_end а также gravity_start/gravity_end (идет для всех left/right атрибуты). Начальный и конечный теги зависят от направления макета. Если у пользователя есть локаль с ltr начало слева и конец справа, если у пользователя есть локаль с rtl начало справа, а конец слева.

Я лично предпочитаю использовать файлы макетов, которые написаны для работы с обоими rtl а также ltr Если у вас есть отдельные файлы, легко пропустить обновление в одной версии, если вы храните разные файлы, что приводит к ухудшению работы пользователей.

Также переместите макет в папку макета (удалите "-ldrtl") тогда поменяй все android:layoutDirection="rtl" в android:layoutDirection="locale",

Другие вопросы по тегам