报错 java.lang.IllegalArgumentException: No drawer view found with gravity LEFT
当使用右侧侧边栏时,应该做如下修改:
<com.google.android.material.navigation.NavigationView
android:id="@+id/navigationView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:menu="@menu/navigation_menu"
app:headerLayout="@layout/layout_navigation_header"
android:layout_gravity="end"/> <!-- 将这里改为 "end" -->
findViewById(R.id.imageMenu).setOnClickListener(view ->
drawerLayout.openDrawer(GravityCompat.END)); // 将 START 改为 END
注意: 仅仅是这样修改会报错
这是因为NavigationUI
依然尝试使用GravityCompat.START
来控制侧边栏,这导致了 No drawer view found with gravity LEFT
的错误。
解决:
手动处理侧边栏的打开和关闭,而不是依赖 NavigationUI.setupWithNavController
来自动处理。
// 手动处理导航项选择
navigationView.setNavigationItemSelectedListener(item -> {
boolean handled = NavigationUI.onNavDestinationSelected(item, navController);
if (handled) {
drawerLayout.closeDrawer(GravityCompat.END); // 手动关闭右侧侧边栏
}
return handled;
});