NavigationView和Toolbar侧滑栏

转载请标注来源:KingJA码家的博客

直接上图

NavigationView和Toolbar侧滑栏_第1张图片

Toolbar

Toolbar的使命就是为了替代ActionBar。

compile ‘com.android.support:appcompat-v7:23.1.1’

步骤:

1,因为此范例只使用 Toolbar,所以我们要将让原本的 ActionBar 隐藏起来。

2,在XML布局文件中加入Toolbar

"@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/colorPrimary"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

3,在代码中使用。

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

常用设置

        //显示返回按钮
        getSupportActionBar().setHomeButtonEnabled(true);
        //设置返回按钮可点击
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        //设置返回按钮图标
        toolbar.setNavigationIcon(R.mipmap.menu);
        //去掉原标题
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        //设置LOGO
        toolbar.setLogo(R.mipmap.logo);
        //设置主标题
        toolbar.setTitle("Title");
        //设置副标题
        toolbar.setSubtitle("SubTitle");

4,加入菜单项。

"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    >
    "@+id/location"
        android:icon="@mipmap/location"
        android:title="ListView"
        app:showAsAction="ifRoom|withText"/>
    "@+id/listview"
        android:icon="@mipmap/ic_launcher"
        android:title="ListView"
        app:showAsAction="never|withText"/>
    "@+id/gridview"
        android:icon="@mipmap/ic_launcher"
        android:title="GridView"
        app:showAsAction="never|withText"/>

5,触发菜单项点击事件。

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.location:
                Toast.makeText(this,"Location",Toast.LENGTH_SHORT).show();
                break;
            case R.id.listview:
                Toast.makeText(this,"ListView",Toast.LENGTH_SHORT).show();
                break;
            case R.id.gridview:
                Toast.makeText(this,"GridView",Toast.LENGTH_SHORT).show();
                break;
            case android.R.id.home:
                drawerLayout.openDrawer(GravityCompat.START);
                break;
            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    }

在Material Design中,Navigation drawer导航抽屉,被设计用于应用导航,提供了一种通用的导航方式,体现了设计的一致性。而NavigationView的典型用途就是配合之前v4包的DrawerLayout,作为其中的Drawer部分,即导航菜单的本体部分。NavigationView是一个导航菜单框架,使用menu资源填充数据,使我们可以更简单高效的实现导航菜单。它提供了不错的默认样式、选中项高亮、分组单选、分组子标题、以及可选的Header。

compile ‘com.android.support:design:23.1.1’

XML布局

典型的布局文件如下,外层是DrawerLayout,它的第一个child将作为content,第二个child作为Drawer

"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    "match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        "@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

        "match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="Main UI" />
    

    "@+id/navigationView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/menu_header"
        app:menu="@menu/menu_left">

    

NavigationView的两个自定义属性

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

  • app:menu接收一个menu,作为导航菜单的菜单项,几乎是必选项,不然这个控件就失去意义了

app:headerLayout=”@layout/menu_header”

侧滑Header布局

"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    "centerCrop"
        android:src="@mipmap/header"
        android:layout_width="wrap_content"
        android:layout_height="200dp" />
app:menu=”@menu/menu_left”

侧滑菜单menu

"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android">
    "single">
        "@+id/drawer_home"
            android:icon="@mipmap/ic_launcher"
            android:title="home"/>
        "@+id/section"
            android:icon="@mipmap/ic_launcher"
            android:title="分组1">
            
                "@+id/drawer_favourite"
                    android:icon="@mipmap/ic_launcher"
                    android:title="favourite"/>
                "@+id/drawer_downloaded"
                    android:icon="@mipmap/ic_launcher"
                    android:title="downloaded"/>
            
        
        "@+id/section2"
            android:title="分组2">
            
                "@+id/drawer_more"
                    android:icon="@mipmap/ic_launcher"
                    android:title="more"/>
                "@+id/drawer_settings"
                    android:icon="@mipmap/ic_launcher"
                    android:title="settings"/>
            
        
    
侧滑按钮加入动画
ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close);
actionBarDrawerToggle.syncState();//初始化状态
drawerLayout.setDrawerListener(actionBarDrawerToggle);
侧滑栏中的菜单加入点击事件
NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView);
navigationView.setNavigationItemSelectedListener(navigationItemSelectedListener);
private NavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener=new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem item) {
            if (previousItem!=null){
                previousItem.setChecked(false);
            }

            switch (item.getItemId()) {
                case R.id.drawer_home:
                    break;
                case R.id.drawer_favourite:
                    break;
                case R.id.drawer_downloaded:
                    break;
                default:
                    break;
            }
            previousItem = item;
            Toast.makeText(MainActivity.this,item.getTitle(),Toast.LENGTH_SHORT).show();
            item.setChecked(true);
            drawerLayout.closeDrawers();
            return true;
        }
    };

你可能感兴趣的:(——Android进阶)