Лучше всего размещать значки меню в левой части панели навигации на персидском языке или устройствах на иврите? - PullRequest
2 голосов
/ 02 августа 2020

Я пытаюсь открыть панель навигации справа. (мне удалось это сделать, используя LAYOUT_GRAVITY = "END"). Теперь я хочу, чтобы все пункты меню начинались справа, а также их значки справа.

введите описание изображения здесь

Для этого я добавил (SUPPORTSRTL = "TRUE") в манифест, и это также решило проблему. Но вот проблема:

  • , если язык устройства установлен на английский sh, все работает отлично.
  • Но если язык устройства установлен на персидский (что является RTL), то все остальное в приложении будет справа налево. Это означает, что все, что я вставляю справа, идет налево, а все, что установлено слева, идет направо. Я даже пробовал использовать «начало» и «конец» вместо «вправо» и «влево», но это не решило проблему.

Чтобы решить эту проблему, мне пришлось установить (LAYOUTDIRECTION = " LTR ") к элементу root макетов на всех моих действиях. Это решило проблему, и теперь все находится в том положении, которое я хотел, однако это не кажется надежным решением для добавления этой строки кода в элемент root каждого действия, которое я когда-либо добавляю в свое приложение. Не могли бы вы сказать мне, лучший ли это способ сделать это или нет?

Я нашел другие вопросы с тем же топом c без принятых правильных ответов.

1 Ответ

0 голосов
/ 02 августа 2020

эта строка кода должна решить вашу проблему.

    ViewCompat.setLayoutDirection(drawer, ViewCompat.LAYOUT_DIRECTION_RTL);

drawer - это ссылка на ваш DrawerLayout.

другой способ принудительно применить макет RTL к действиям - использовать стили xml. вот как я должен это сделать:

<?xml version="1.0" encoding="utf-8"?>
<resources>

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

</style>

<style name="ShaliRTL" parent="AppTheme">
    <item name="android:layoutDirection">rtl</item>
</style>

</resources>

затем в android манифесте примените этот новый стиль (ShaliRTL) к вашей конкретной c активности:

        <activity
        android:name=".YourActivity"
        android:label="@string/title_activity_settings"
        android:theme="@style/ShaliRTL"
        android:screenOrientation="fullSensor" />

удачи.

...