1

我试图有一个从右侧打开的导航抽屉。(我设法使用 LAYOUT_GRAVITY="END" 做到了这一点)。现在我希望所有的菜单项从右边开始,它们的图标也在右边。

在此处输入图像描述

为此,我将 (SUPPORTSRTL="TRUE") 添加到清单中,这也解决了问题。但问题是:

  • 如果设备的语言设置为英语,则一切正常。
  • 但是如果设备的语言设置为波斯语(这是一种 RTL 语言),那么应用程序中的其他所有内容都将从右到左。这意味着我放在右边的东西会转到左边,而放在左边的东西会转到右边。我什至尝试使用“开始”和“结束”而不是“右”和“左”,但这并没有解决问题。

为了解决这个问题,我必须将 (LAYOUTDIRECTION="LTR") 设置为每个活动的布局的根元素。这解决了问题,现在一切都在我想要的位置,但是这似乎不是一个可持续的解决方案,将这行代码添加到我将添加到我的应用程序的每个活动的根元素中。你能告诉我这是否是最好的方法吗?

我发现其他具有相同主题的问题没有被接受的正确答案。

4

1 回答 1

0

这行代码应该可以解决您的问题

    ViewCompat.setLayoutDirection(drawer, ViewCompat.LAYOUT_DIRECTION_RTL);

抽屉是对您的 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 manifest 中将这种新样式(ShaliRTL)应用于您的特定活动:

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

祝你好运。

于 2020-08-02T11:17:08.287 回答