使用NavigationView实现侧滑菜单,并对里面的值进行相应的修改
这样就可以实现一个侧滑菜单
在android studio中选择新建Navigation Drawer Activity项目时会自动生成相关代码
侧滑菜单头部 nav_header_main.xml
菜单部分 activity_main_drawer.xml
注意 这个文件要放在res/menu路径下
MainActivity
class MainActivity : AppCompatActivity() {
private lateinit var appBarConfiguration: AppBarConfiguration
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
setSupportActionBar(binding.appBarMain.toolbar)
val drawerLayout: DrawerLayout = binding.drawerLayout
val navView: NavigationView = binding.navView //新建一个NavigationView的实例
val navController = findNavController(R.id.nav_host_fragment_content_main)
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
appBarConfiguration = AppBarConfiguration(
setOf(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow
), drawerLayout
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
//如果想改变NavigationView头部nav_username的内容时,就要根据刚刚新建的NavigationView
val bundle = intent.extras;
if (bundle != null) {
val headerView: View = navView.getHeaderView(0);//得到头部
val textName: TextView = headerView.findViewById(R.id.nav_username);
textName.text = bundle.getString("username")
}
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.main, menu)
return true
}
override fun onSupportNavigateUp(): Boolean {
val navController = findNavController(R.id.nav_host_fragment_content_main)
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}
}
补充:控制menu中的item是否可见
如果permission为0,nav_gallery和nav_slideshow不可见
val permission: Int = bundle.getInt("permission")
if (permission == 0){
navView.menu.findItem(R.id.nav_gallery).isVisible = false
navView.menu.findItem(R.id.nav_slideshow).isVisible = false
}



