Ошибка андроида в загрузке "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!!!:
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"
,