Navigation Drawer使用

简介

Navigation Drawer是在 Material Design 中推出的一种侧滑导航菜单栏控件。包含两个部分,一部分是侧滑(DrawerLayout),一部分是导航菜单栏(NavigationView)。

AS新建

利用Android Studio可以快速建立这个控件

  • 在新建项目时,在最后选择Navigation Drawer Activity
Navigation Drawer使用_第1张图片
新建项目时
  • 在新建Activity时,选择Navigation Drawer Activity
Navigation Drawer使用_第2张图片
新建Activity时

DrawerLayout

DrawerLayout布局中,由两部分组成,一部分是内容布局,一部分是侧滑菜单布局。其中侧滑菜单布局通过设置 android:layout_gravity 属性,来控制是左侧滑,还是右侧滑。参考实例代码


    
        
        
    

    

    

至此,侧滑效果就实现了。

Navigation Drawer使用_第3张图片
侧滑效果

DrawerLayout中也有一些常会用到的方法,来控制例如打开、关闭菜单,监听滑动事件等,这里暂时列举一些,还是得多看api和源码。

//打开左侧菜单,同理右侧就是 GravityCompat.END
drawerLayout.openDrawer(GravityCompat.START);
//关闭左侧菜单,同理右侧就是 GravityCompat.END
drawerLayout.closeDrawer(GravityCompat.START);
//设置抽屉打开时,剩余挡住内容区域部分的颜色
drawerLayout.setScrimColor(Color.parseColor("#4cff0000"));
//设置抽屉锁定模式 LOCK_MODE_LOCKED_OPEN:锁定 无法滑动
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN, GravityCompat.START);
//监听滑动事件
drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
    @Override
    public void onDrawerSlide(View drawerView, float slideOffset) {
        //抽屉滑动时回调
    }

    @Override
    public void onDrawerOpened(View drawerView) {
        //抽屉打开后回调
    }

    @Override
    public void onDrawerClosed(View drawerView) {
        //抽屉关闭后回调
    }

    @Override
    public void onDrawerStateChanged(int newState) {
        //抽屉滑动状态改变时回调
        switch (newState) {
            case DrawerLayout.STATE_DRAGGING:
                //拖动状态
                break;
            case DrawerLayout.STATE_IDLE:
                //静止状态
                break;
            case DrawerLayout.STATE_SETTLING:
                //设置状态
                break;
            default:
                break;
        } 
    }
});

NavigationView

NavigationView是兼容包中提供用来实现导航菜单控件。使用menu资源填充数据,可以更简单高效的实现导航菜单。

添加依赖
compile 'com.android.support:design:24.1.0'
布局中引用

    
        
        
    

    

NavigationView分为两部分,一部分是headerLayout,一部分是menu。headerLayout就是对应菜单的顶部部分,一般用来显示用户信息什么的,menu则对应实际的菜单选项。

定义headerLayout

    

定义menu


    
        
        
        
        
    

    
        
            
            
            
        
    

这样NavigationView就添加成功,效果如下:

Navigation Drawer使用_第4张图片
NavigationView效果
Menu Item 的点击监听

直接使用 NavigationView 的 setNavigationItemSelectedListener() 方法即可

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        int itemId = item.getItemId();
        switch (itemId) {
            case R.id.item_dync:
                break;
            case R.id.item_explore:
                break;
            //......
        }
        return true;
    }
});

总结

Navigation Drawer的用法还是比较简单的,但是NavigationView的封装性太高,个人觉得不是特别实用,相对自己定义界面可能来的比较方便,或许是自己用的不到家。

关于抽屉效果,个人觉得目前而言随着手机的屏幕越来越大,导致用户操作起来不是很方便,现在主流的设计还是底部导航栏。

你可能感兴趣的:(Navigation Drawer使用)