Android Material Design NavigationView

       侧滑菜单DrawerLayout滑动出来的菜单,我们可以自己写一些觉得不错的布局。(如果对DrawerLayout陌生的话请点击这篇博客:Android Material Design DrawerLayout)

      也可以使用Google最新推出规范式设计中的NavigationView和DrawerLayout结合实现侧滑菜单栏效果,NavigationView继承自FrameLayout。一般用于应用的导航菜单,菜单的内容来自于menu文件。所谓的谷歌设计思想估计就是这样咯!风格上得到一个大致统一的美观,同时也给程序员节省时间。

     NavigationView是帮助DrawerLayout管理侧滑菜单的布局,所以NavigationView由两部分组成,一个头部布局HeaderView,一个是menu文件夹下的内容布局。

      使用NavigationView。我们需要添加依赖包:

compile 'com.android.support:design:23.4.0'

咱们还是从例子中更好的去了解NavigationView吧!

头部布局HeaderView:右击layout--New---Layout resource file创建一个新的文件header_layout.xml。




    

menu文件夹下的内容布局:右击res文件夹--New--Directory,创建一个menu文件夹;然后右击menu文件夹--New--Layout resource file创建一个新的文件nav_menu.xml



    
        
        
        
        
        
    

侧滑菜单DrawerLayout布局:layout_drawerlayout.xml




    

    

    

    

其中:

  • android:layout_gravity可设置抽屉,也就是NavigationView从左边或是右边打开。
  • app:menu用于设置菜单内容的xml布局。
  • app:headerLayout用于设置NavigationView的HeaderView的xml布局文件。

最后是主布局:activity_main.xml




    
    

Java代码没有写什么代码,就不贴了,直接运行看效果:

Android Material Design NavigationView_第1张图片

NavigationView点击事件:分为两种点击事件,一种是头部布局点击事件,另一种是内容布局的点击事件。

一:头部事件:

处理头部点击事件,我们需要先获得到头部控件,在Java代码中我们可以通过下面的方式获得头部控件,然后通过调用headerView中的findViewById方法来查找到头部的控件,设置点击事件即可。

//获取头布局文件  
View headerView = mNavigationView.getHeaderView(0);

二:内容事件:Java代码

public class MainActivity extends AppCompatActivity {
    private DrawerLayout mDrawerLayout;
    private NavigationView mNavigationView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initLayout();
    }
    public void initLayout(){
        mDrawerLayout=(DrawerLayout) findViewById(R.id.drawer_layout);
        mNavigationView=(NavigationView) findViewById(R.id.navigation_view);
        //将more菜单项设置为默认选中
        mNavigationView.setCheckedItem(R.id.nav_more);
        mNavigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem item) {
                switch (item.getItemId()){
                    case R.id.nav_more:
                        //逻辑代码想干啥干啥
                        break;
                    case R.id.nav_left:
                        //逻辑代码想干啥干啥
                        break;
                    case R.id.nav_delete:
                        //逻辑代码想干啥干啥
                        break;
                    case R.id.nav_share:
                        //逻辑代码想干啥干啥
                        break;
                    case R.id.nav_de:
                        //逻辑代码想干啥干啥
                        break;
                }
                return true;
            }
        });
    }
}

NavigationView依附于DrawerLayout,而DrawerLayout又常常和Toolbar一起使用,三个控件一起使用,效果没得说的。在上面例子的基础上,我们来一个NavigationView+DrawerLayout+Toolbar例子:(如果对Toolbar陌生的话请点击这篇博客:Android Material Design Toolbar)

这里我们写入Toolbar控件就好!新增布局:

layout_toolbar.xml



主布局也要将这个新增的布局加进来:修改主布局

activity_main.xml



    
    
    
    

值得注意的是,Toolbar加进来了,别忘了有些地方需要改改:找到values文件夹下的styles.xml文件,把parent这个属性改下,改为隐藏NoActionBar,

parent="Theme.AppCompat.Light.NoActionBar"

最后修改Java代码:

public class MainActivity extends AppCompatActivity {
    private DrawerLayout mDrawerLayout;
    private NavigationView mNavigationView;
    private Toolbar mToolbar;
    private ActionBarDrawerToggle mDrawerToggle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initLayout();
        //setSupportActionBar方法将Toolbar实例传入
        //其实就是Toolbar替换Actionbar
        setSupportActionBar(mToolbar);
        //设置还回键可用
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        //DrawerLayout监听打开/关闭事件
        mDrawerToggle=new ActionBarDrawerToggle(this,
                mDrawerLayout,mToolbar,
                R.string.open,R.string.close){
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
            }
        };
        mDrawerToggle.syncState();
        mDrawerLayout.addDrawerListener(mDrawerToggle);
    }
    public void initLayout(){
        mToolbar=(Toolbar) findViewById(R.id.toolbar);
        mDrawerLayout=(DrawerLayout) findViewById(R.id.drawer_layout);
        mNavigationView=(NavigationView) findViewById(R.id.navigation_view);
        //将more菜单项设置为默认选中
        mNavigationView.setCheckedItem(R.id.nav_more);
        //NavigationView内容点击事件
        mNavigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem item) {
                switch (item.getItemId()){
                    case R.id.nav_more:
                        //逻辑代码想干啥干啥
                        break;
                    case R.id.nav_left:
                        //逻辑代码想干啥干啥
                        break;
                    case R.id.nav_delete:
                        //逻辑代码想干啥干啥
                        break;
                    case R.id.nav_share:
                        //逻辑代码想干啥干啥
                        break;
                    case R.id.nav_de:
                        //逻辑代码想干啥干啥
                        break;
                }
                return true;
            }
        });
    }
}

效果图:

Android Material Design NavigationView_第2张图片

 

 

你可能感兴趣的:(Android,Material,Design)