Android Design Support Library用NavigationView实现抽屉菜单界面

知是行的主意,行是知的功夫。这篇文章主要讲述Android Design Support Library用NavigationView实现抽屉菜单界面相关的知识,希望能为你提供帮助。
NavigationView在MD设计中很重要,之前Google也提出了使用DrawerLayout来实现导航抽屉。
这次,在android Design Support Library中,Google提供了NavigationView来实现导航菜单界面。
这次我们写的代码在Android用TabLayout实现相似网易选项卡动态滑动效果这篇文章代码的基础上进行改动,所以最好先看看上面这篇文章
首先仍旧是配置build.gradle:

dependencies { compile fileTree(dir: ‘libs‘, include: [‘*.jar‘]) compile ‘com.android.support:appcompat-v7:22.2.0‘ compile ‘com.android.support:design:22.2.0‘ compile ‘com.android.support:recyclerview-v7:22.2.0‘ compile ‘com.android.support:cardview-v7:22.2.0‘ }

‘com.android.support:design:22.2.0’com.android.support:design:22.2.0就是我们须要引入的Android Design Support Library,其次我们还引入了Recyclerview和Cardview。
主界面布局(activity_tab_layout.xml)
< ?xml version="1.0" encoding="utf-8"?> < android.support.v4.widget.DrawerLayout android:id="@+id/dl_main_drawer" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".TabLayoutActivity" android:orientation="vertical"> < android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> < android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> < android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabIndicatorColor="#ADBE107E" app:tabMode="scrollable"/> < /android.support.design.widget.AppBarLayout> < android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"/> < /LinearLayout> < android.support.design.widget.NavigationView android:id="@+id/nv_main_navigation" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:headerLayout="@layout/navigation_header" app:menu="@menu/drawer_view"/> < /android.support.v4.widget.DrawerLayout>

DrawerLayout标签包括了主界面的布局以及抽屉的布局。NavigationView标签下app:headerLayout=”” 能够引入头部文件
app:menu=”“则引入菜单的布局。

头部布局文件(navigation_header.xml)
< ?
xml version="1.0" encoding="utf-8"?
> < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="150dp" android:background="?attr/colorPrimaryDark" android:orientation="horizontal" android:theme="@style/ThemeOverlay.AppCompat.Dark"> < ImageView android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center_vertical" android:layout_marginLeft="50dp" android:background="@drawable/ic_user"/> < TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_gravity="center_vertical" android:text="Liuwangshu" android:textAppearance="@style/TextAppearance.AppCompat.Body1" android:textSize="20sp"/> < /LinearLayout>

菜单布局文件(drawer_view.xml)
< ?xml version="1.0" encoding="utf-8"?> < menu xmlns:android="http://schemas.android.com/apk/res/android"> < group android:checkableBehavior="single"> < item android:id="@+id/nav_home" android:icon="@drawable/ic_dashboard" android:title="首页"/> < item android:id="@+id/nav_messages" android:icon="@drawable/ic_event" android:title="事项"/> < item android:id="@+id/nav_friends" android:icon="@drawable/ic_headset" android:title="音乐"/> < item android:id="@+id/nav_discussion" android:icon="@drawable/ic_forum" android:title="消息"/> < /group> < item android:title="其它"> < menu> < item android:icon="@drawable/ic_dashboard" android:title="设置"/> < item android:icon="@drawable/ic_dashboard" android:title="关于我们"/> < /menu> < /item> < /menu>

来看看主界面的java代码(TabLayoutActivity.java)
package com.example.liuwangshu.mytablayout; import android.support.design.widget.NavigationView; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.view.GravityCompat; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import java.util.ArrayList; import java.util.List; public class TabLayoutActivity extends AppCompatActivity { private DrawerLayout mDrawerLayout; private ViewPager mViewPager; private TabLayout mTabLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tab_layout); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); final ActionBar ab = getSupportActionBar(); ab.setHomeAsUpIndicator(R.drawable.ic_menu); ab.setDisplayHomeAsUpEnabled(true); mViewPager = (ViewPager) findViewById(R.id.viewpager); mDrawerLayout = (DrawerLayout) findViewById(R.id.dl_main_drawer); NavigationView navigationView = (NavigationView) findViewById(R.id.nv_main_navigation); if (navigationView != null) { navigationView.setNavigationItemSelectedListener( new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { menuItem.setChecked(true); mDrawerLayout.closeDrawers(); return true; } }); } initViewPager(); }

navigationView.setNavigationItemSelectedListener对菜单的条目进行了监听。假设被点击则将条目设置为选中状态并收回抽屉。当然别忘了对toolbar的菜单选项进行监听回调,否则抽屉就出不来了。

(TabLayoutActivity.java)
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: mDrawerLayout.openDrawer(GravityCompat.START); return true; } return super.onOptionsItemSelected(item); }

最后执行程序来看看效果
Android Design Support Library用NavigationView实现抽屉菜单界面

文章图片

【Android Design Support Library用NavigationView实现抽屉菜单界面】github源代码下载





    推荐阅读