常见错误
NavigationView占了主界面;这是因为没有设置layout_gravity = “start”
使用
1、依赖包
compile 'com.android.support:design:25.3.1'
compile 'de.hdodenhof:circleimageview:2.1.0' //圆形头像
2、布局文件
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="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">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
</FrameLayout>
<android.support.design.widget.NavigationView
app:headerLayout="@layout/nav_header"
app:menu="@menu/menu_main"
android:layout_gravity="start"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.v4.widget.DrawerLayout>
注:第一个子控件是主界面显示的内容,第二个是侧滑菜单显示的内容
nav_header.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="180dp">
<de.hdodenhof.circleimageview.CircleImageView
android:layout_centerInParent="true"
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@drawable/me"/>
<TextView
android:id="@+id/email"
android:text="15626161245@163.com"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"/>
<TextView
android:text="莫铭棋"
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/email"/>
</RelativeLayout>
menu_nav.xml 侧滑菜单的菜单项
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_main_search"
android:icon="@drawable/ic_search_white_24dp"
android:title="搜索"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_main_add"
android:icon="@drawable/ic_add_white_24dp"
android:title="添加"
app:showAsAction="ifRoom"
/>
<item android:title="分享">
<menu>
<item
android:title="QQ"
android:icon="@drawable/ic_share_white_24dp" />
</menu>
</item>
</menu>
3、代码:设置HomeAsUp按钮,设置点击事件
注意:主界面的点击事件在OnOptionItemSelected()方法中处理,而侧滑栏中的点击时间需要setNavigationItemSelected
ActionBar actionBar = getSupportActionBar();
if(null != actionBar) {
actionBar.setDisplayHomeAsUpEnabled(true); //设置导航按钮的显示
actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_white_24dp);//设置图标
}
//侧滑导航栏
mDrawerLayout = (DrawerLayout)findViewById(R.id.drawerlayout);
NavigationView navigationView = (NavigationView) findViewById(R.id.design_navigation_view);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
mDrawerLayout.closeDrawer(GravityCompat.START,true); //点击任一菜单都关闭侧滑栏
return true;
}
});
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
//android.R.id.home是那个HomeAsUp导航按钮
case android.R.id.home:
Toast.makeText(this, "点击了home", Toast.LENGTH_SHORT).show();
mDrawerLayout.openDrawer(GravityCompat.START);
break;
default:
Toast.makeText(this, "点击了菜单", Toast.LENGTH_SHORT).show();
}
return true;
}