如何在菜单中设置 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_gravity
和gravity
如果您不想使用 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));
}
}
从您的代码中删除 layoutDirection
、gravities
。
勾选这个tutorial
在我的应用程序中,我想在导航抽屉中使用菜单。
我想设置 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_gravity
和gravity
如果您不想使用 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));
}
}
从您的代码中删除 layoutDirection
、gravities
。
勾选这个tutorial