Android Material Design NavigationView侧滑界面自定义

一、侧滑界面Menu自定义:

在menu文件夹下新建activity_main_drawer.xml文件,自定义标题和icon:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <menu xmlns:android="http://schemas.android.com/apk/res/android">   
 3 
 4 <group android:checkableBehavior="single">
 5         <item android:id="@+id/nav_forWhy"     android:icon="@drawable/ic_nav_for_why"
 6             android:title="十万个为什么" />
 7         <item android:id="@+id/nav_knowledge" android:icon="@drawable/ic_nav_knowledge"
 8             android:title="百科知识" />
 9         <item android:id="@+id/nav_expo" android:icon="@drawable/ic_nav_expo"
10             android:title="科普博览" />
11         <item android:id="@+id/nav_reader" android:icon="@drawable/ic_nav_reader"
12             android:title="科普读物" />
13         <item android:id="@+id/nav_favorite" android:icon="@drawable/ic_nav_favorite"
14             android:title="我的私藏" />
15     </group>
16 
17     <item android:title="其他">
18         <menu>
19             <item android:id="@+id/nav_author" android:icon="@drawable/ic_nav_author"
20                 android:title="作者"/>
21             <item android:id="@+id/nav_about" android:icon="@drawable/ic_nav_about"
22                 android:title="版权说明" />
23         </menu>
24     </item>
25 
26 </menu>

 

二、侧滑界面头部布局自定义

在layout下新建nav_header_main.xml文件进行侧滑界面头部自定义布局:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 
 3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4 
 5     android:layout_width="match_parent"
 6 
 7     android:layout_height="@dimen/nav_header_height"
 8 
 9     android:background="@drawable/side_nav_bar"
10 
11     android:paddingBottom="@dimen/activity_vertical_margin"
12 
13     android:paddingLeft="@dimen/activity_horizontal_margin"
14 
15     android:paddingRight="@dimen/activity_horizontal_margin"
16 
17     android:paddingTop="@dimen/activity_vertical_margin"
18 
19     android:theme="@style/ThemeOverlay.AppCompat.Dark"
20 
21     android:orientation="vertical"
22 
23     android:gravity="bottom">
24 
25 
26 
27     <ImageView android:layout_width="wrap_content"
28 
29         android:layout_height="wrap_content"
30 
31         android:paddingTop="@dimen/nav_header_vertical_spacing"
32 
33         android:src="@mipmap/ic_launcher"
34 
35         android:id="@+id/imageView" />
36 
37 
38 
39     <TextView android:layout_width="match_parent"
40 
41         android:layout_height="wrap_content"
42 
43         android:paddingTop="@dimen/nav_header_vertical_spacing"
44 
45         android:text="@string/app_name"
46 
47         android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
48 
49 
50 
51     <TextView android:layout_width="wrap_content"
52 
53         android:layout_height="wrap_content"
54 
55         android:text="Encyclopedia World"
56 
57         android:id="@+id/textView" />
58 
59 
60 
61 </LinearLayout>

 

三、开始创建activity的布局文件

将自定义menu和头部布局添加到activity_main.xml布局文件的NavigationView控件中:
 1 <android.support.design.widget.NavigationView
 2 
 3     android:id="@+id/nav_view"
 4 
 5     android:layout_width="wrap_content"
 6 
 7     android:layout_height="match_parent"
 8 
 9     android:layout_gravity="start"
10 
11     android:fitsSystemWindows="true"
12 
13     app:headerLayout="@layout/nav_header_main"
14 
15     app:menu="@menu/activity_main_drawer" />

 

四、在activity声明并调用NavigationView
声明NavigationView:
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);

 

对NavigationView每个item的进行监听:
 1 @Override
 2 
 3 public boolean onNavigationItemSelected(MenuItem item) {
 4 
 5     // Handle navigation view item clicks here.
 6 
 7     int id = item.getItemId();
 8 
 9 
10 
11     switch (id){
12 
13         case R.id.nav_forWhy://十万个为什么
14 
15                         break;
16 
17         case R.id.nav_knowledge://百科知识
18 
19                        break;
20 
21         case R.id.nav_expo://科普博览
22             break;
23 
24         case R.id.nav_reader://科普读物
25 
26                       break;
27 
28         case R.id.nav_favorite://我的私藏
29 
30                        break;
31 
32         case R.id.nav_author://作者
33 
34                         break;
35 
36         case R.id.nav_about://版权说明
37 
38                      break;
39 
40     }
41 
42 
43 
44     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
45 
46     drawer.closeDrawer(GravityCompat.START);//关闭侧滑界面
47 
48     return true;
49 
50 }

 

五、最终效果图:

Demo地址:http://zhushou.360.cn/detail/index/soft_id/3145828

 
posted @ 2015-11-18 10:57  LT5505  阅读(464)  评论(0编辑  收藏  举报