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.xmlonBackPressed判断侧滑菜单是否可选,调用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,下次一定会!!!

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知 不知

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值