NavigationView


一、DrawerLayout


侧面滑动导航栏。

  • 第一个子布局:内容区
  • 第二个子布局:导航栏布局
  • 注意导航栏布局里要设置 android:layout_gravity"start" 表示左侧。



    
    

    
    
    

二、NavigationView


用来做 DrawerLayout 的导航栏布局



    
    
    


  • app:headerLayout:接收一个 layout,作为导航菜单顶部的 Header,可选项。
  • app:menu:接收一个 menu,作为导航菜单的菜单项,几乎是必选项。

menu:



    
        
        
        
            
                
                    
                    
                
            
        
        
        
    

  • menu 里可嵌套子 menu。

menu item 点击事件:

setNavigationItemSelectedListener() 方法

        navigationView=(NavigationView)findViewById(R.id.navigation_view);
        // 去掉scrollbar。scrollbar在NavigationView的child:NavigationMenuView中,
        navigationView.getChildAt(0).setVerticalScrollBarEnabled(false);
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                        item.setChecked(true);
                        Toast.makeText(MainActivity.this, ""+item.getTitle(), Toast.LENGTH_SHORT).show();
                        return true;
                    }
                });

三、Toolbar 左上角图标:


        drawerLayout=(DrawerLayout)findViewById(R.id.drawer_layout);
        drawerToggle=new ActionBarDrawerToggle(this,drawerLayout,toolbar,
                R.string.drawer_open,R.string.drawer_close);
        drawerToggle.syncState();
        drawerLayout.addDrawerListener(drawerToggle);

打开关闭时图标有动画变化。


四、导航栏与返回键:


似乎默认按返回键会退出应用而不是关闭导航栏,需要重写下 onBackPressed()。

    // 按返回时若侧边导航栏是打开的,先退出
    @Override
    public void onBackPressed(){
        if(drawerLayout.isDrawerOpen(findViewById(R.id.navigation_view))){
            drawerLayout.closeDrawers();
        }else {
            super.onBackPressed();
        }
    }

你可能感兴趣的:(NavigationView)