NavigationView是Material库中提供的一个控件,可以将滑动菜单页面变得非常简单。
- 添加依赖
文件位置:
dependencies {
//其他内容省略...
//Material库
implementation 'com.google.android.material:material:1.1.0'
//一个开源项目 CircleImageView,可以用来实现图片圆形化的功能
implementation 'de.hdodenhof:circleimageview:3.0.1'
}
- 更换主题
文件位置:
- 新建文件夹menu->新建nav_menu.xml
文件位置:
编写NavigationView的菜单项 (menu)
- 编写nav_header.xml (headerlayout)
文件位置:
- 修改activity_main.xml
- 在MainActivity.java中处理菜单项的点击事件
package com.example.networktest;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import com.google.android.material.navigation.NavigationView;
public class MainActivity extends AppCompatActivity {
private Toolbar tool_bar;
private DrawerLayout drawerLayout;
private NavigationView navView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
listen();
}
private void init() {
//绑定 NavigationView控件
navView = findViewById(R.id.navView);
//绑定 DrawerLayout控件
drawerLayout = findViewById(R.id.drawer_layout);
//绑定 Toolbar控件
tool_bar = findViewById(R.id.tool_bar);
//得到toolBar实例
setSupportActionBar(tool_bar);
//显示 tool_bar左侧按钮
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//设置 tool_bar左侧按钮图标
getSupportActionBar().setHomeAsUpIndicator(R.drawable.navi);
//设置 note_group为默认选中
navView.setCheckedItem(R.id.note_group);
// setSupportActionBar(toolbar);参数报错
// Android Studio 自动导包错误
// import android.widget.Toolbar;
// 将上面的代码替换成下面的
// import androidx.appcompat.widget.Toolbar;
}
private void listen() {
//设置 一个菜单选项 选中事件 的监听器
navView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
//当用户点击了任意菜单,回调到onNavigationItemSelected方法中
@Override
public boolean onNavigationItemSelected(MenuItem item) {
//显示 当前点击了哪个item
switch (item.getItemId()) {
case R.id.note_group:
Toast.makeText(getApplication(), "你点击了note_group", Toast.LENGTH_SHORT).show();
break;
case R.id.note_collect:
Toast.makeText(getApplication(), "你点击了note_collect", Toast.LENGTH_SHORT).show();
break;
case R.id.note_setting:
Toast.makeText(getApplication(), "你点击了note_setting", Toast.LENGTH_SHORT).show();
break;
}
//关闭 滑动菜单
drawerLayout.closeDrawers();
return true;
}
});
}
//加载 toorlbar.xml这个菜单文件
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar, menu);
return true;
}
//处理多个按钮的点击事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
//按下home按钮 打开滑动菜单
//openDrawer() 传入gravity参数 确保这里的行为和xml中定义的一致
drawerLayout.openDrawer(GravityCompat.START);
break;
case R.id.love:
Toast.makeText(this, "you clicked love", Toast.LENGTH_SHORT).show();
break;
case R.id.save:
Toast.makeText(this, "you clicked save", Toast.LENGTH_SHORT).show();
break;
case R.id.rew:
Toast.makeText(this, "you clicked rewrite", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
}
运行效果图:



