Android开发-侧滑菜单(极简单)
前言
如今在很多APP中都使用侧滑菜单,最典型的我们平常使用的QQ啦,那么最简单的方式莫过于使用Google官方的DrawerLayout+NavigationView去实现了。
添加依赖
如果你没有v7的依赖包,请在build.gradle(app)的dependencies标签里添加这两条依赖,Android X 依赖库的就不需要添加DrawerLayout所需依赖。
<!--DrawerLayout所需依赖-->
implementation 'com.android.support:appcompat-v7:24.2.1'
<!--NavigationView所需依赖-->
implementation 'com.android.support:design:29.1.1'
绘制布局
主布局main_activity.xml
在 include标签里连接主界面布局(home_main),NavigationView里使用headerLayout属性设置侧滑菜单的头部布局top_main,在menu属性里设置你的菜单项activity_main_drawer。
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/home_id"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- android:clickable="true"解决主界面事件穿透 -->
<include
layout="@layout/home_main"
android:layout_height="match_parent"
android:clickable="true"
android:layout_width="match_parent"/>
<!--必须设置layout_gravity属性,表示侧滑方向-->
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/top_main"
android:background="#F8BFC4"
app:menu="@menu/activity_main_drawer"
/>
</androidx.drawerlayout.widget.DrawerLayout>
主界面布局home_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:gravity="center"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="这是主界面"
/>
</LinearLayout>
头部布局top_main
一个头像(ImageView),一个个性签名(TextView)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:layout_marginTop="10dp"
>
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/ic_launcher_background"/>
<TextView
android:layout_marginTop="10dp"
android:text="雁过留声,是一种个性!"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
菜单项activity_main_drawer.xml
在res目录下新建menu目录,新建activity_main_drawer.xml文件,group标签产生分割线。
<?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_camera"
android:icon="@drawable/ic_launcher_background"
android:title="Import" />
<item
android:id="@+id/nav_gallery"
android:icon="@drawable/ic_launcher_background"
android:title="Gallery" />
<item
android:id="@+id/nav_slideshow"
android:icon="@drawable/ic_launcher_background"
android:title="Slideshow" />
<item
android:id="@+id/nav_manage"
android:icon="@drawable/ic_launcher_background"
android:title="Tools" />
</group>
<item android:title="Communicate">
<menu>
<item
android:id="@+id/nav_share"
android:icon="@drawable/ic_launcher_background"
android:title="Share" />
<item
android:id="@+id/nav_send"
android:icon="@drawable/ic_launcher_background"
android:title="Send" />
</menu>
</item>
</menu>
实现功能
在你的MainActivity.java文件中关联主布局main_activity.xml,onBackPressed判断侧滑菜单是否可选,调用setNavigationItemSelectedListener实现item的点击事件。
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.Toast;
import com.google.android.material.navigation.NavigationView;
public class MainActivity extends AppCompatActivity {
DrawerLayout Drawer;
NavigationView navigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Drawer = findViewById(R.id.home_id);
navigationView =findViewById(R.id.nav);
// 设置item图标正常显示
navigationView.setItemIconTintList(null);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
// 为item设置逐个点击事件
// switch (menuItem.getItemId()){
// case R.id.nav_camera:{
// Toast.makeText(MainActivity.this,"nav_camera",Toast.LENGTH_SHORT).show();
//
// }break;
//
//
// }
Toast.makeText(MainActivity.this,menuItem.getTitle().toString(),Toast.LENGTH_SHORT).show();
return false;
}
});
}
@Override
public void onBackPressed() {
if (Drawer.isDrawerOpen(GravityCompat.START)) {
Drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
}
效果图
借鉴所得:https://cloud.tencent.com/developer/article/1326661
源码下载:https://download.csdn.net/download/qq_41858698/12056769
相关博文:
Android开发系统结构
Android开发注册登录-注册
Android开发注册登录-登录
暂时还未上传GitHub,下次一定会!!!