如何在菜单中设置 RTL?

How to set RTL in a menu?

在我的应用程序中,我想在导航抽屉中使用菜单。
我想设置 RTL 菜单,我写了下面的代码但没有设置 RTL。

我在菜单中的代码:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_gravity="end"
    android:gravity="end"
    android:layoutDirection="rtl">

    <group
        android:layout_gravity="end"
        android:checkableBehavior="single"
        android:gravity="end">

        <!-- Recommended icon color code: #828282 -->
        <item
            android:id="@+id/action_home"
            android:layout_gravity="end"
            android:gravity="end"
            android:icon="@drawable/ic_home"
            android:title="@string/site_menu_home" />

        <item
            android:id="@+id/action_menus"
            android:layout_gravity="end"
            android:gravity="end"
            android:icon="@drawable/ic_menu1"
            android:title="@string/site_menu_menus" />

抽屉编码为XML:

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="right"
    android:layoutDirection="rtl"
    android:background="@color/white"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_main"
    app:menu="@menu/menu_drawer" />

我的代码结果是:https://s9.postimg.org/5m000kf3z/Capture_2018-03-25-11-30-57.png

如何修复它并设置 RTL 菜单?

manifest.xml

中添加supportsRtl
<application
    ....
    android:supportsRtl="true"
    ....
>

</application>

并且menu.xml

中不需要设置layout_gravitygravity

如果您不想使用 supportsRtl,您可以使用菜单项的自定义布局。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_home"
        android:title="Home"
        app:actionLayout="@layout/item_nav_bar" <!-- important part -->
        app:showAsAction="ifRoom"/>

</menu>

item_nav_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="center"
    android:padding="10dp">

    <ImageView
        android:id="@+id/navImage"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:src="@drawable/ic_menu_camera"/>
</FrameLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {

        ....

        // Changing image in NavigationDrawer

        // First Item
        MenuItem item1 = navigationView.getMenu().getItem(0);
        ImageView img = ((ImageView) item1.getActionView().findViewById(R.id.navImage));
    }
}

从您的代码中删除 layoutDirectiongravities

勾选这个tutorial