android 侧滑菜单_仿QQ侧滑菜单栏

4fa92dbc3505dc48e718a74b00d10088.png

先上效果图,是你想要的就继续往下看吧

一、首先添加依赖如下所示

5b2b5a7434d642418dfe22d5d3220f86.png

二、之后编写主布局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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/drawer_layout"
    tools:context=".MainActivity">
    <!--主视图-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            android:elevation="0dp"
            android:theme="@style/AppTheme.PopupOverlay">
            <android.support.v7.widget.Toolbar
                android:id="@+id/mToolbar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:theme="@style/AppTheme.AppBarOverlay" />
        </android.support.design.widget.AppBarLayout>
        <!--主内容-->
        <LinearLayout
            android:id="@+id/main_content_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"/>
    </LinearLayout>
    <!--侧边栏-->
    <!--headerLayout:加载侧标栏头部布局-->
    <!--menu:加载侧标栏菜单布局-->
    <android.support.design.widget.NavigationView
        android:id="@+id/nav"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_home"
        app:menu="@menu/new_menu"/>
</android.support.v4.widget.DrawerLayout>

三、编写侧滑栏头部布局和菜单布局如下

头部布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="180dp"
             xmlns:app="http://schemas.android.com/apk/res-auto"
             android:background="@color/colorPrimaryDark"
             android:gravity="center"
             android:orientation="vertical"
             android:theme="@style/ThemeOverlay.AppCompat.Dark">
    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:layout_gravity="center"
        android:layout_marginTop="10dp"
        android:gravity="center"
        android:layout_height="wrap_content">
 
        <de.hdodenhof.circleimageview.CircleImageView
            android:id="@+id/iv_avatar"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:src="@drawable/login_log"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingTop="10dp"
            android:text="Android Studio"
            android:textAppearance="@style/TextAppearance.AppCompat.Body1"/>
    </LinearLayout>
</LinearLayout>

菜单布局

<?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/voice_switch"
        android:icon="@mipmap/girl"
        android:title="美女相册" />
    <item
        android:id="@+id/version"
        android:icon="@mipmap/version"
        android:title="版本检测" />
    <item
        android:id="@+id/location"
        android:icon="@mipmap/location"
        android:title="我的位置" />
</group>
    <group android:checkableBehavior="single">
        <item
            android:id="@+id/scan"
            android:title="扫一扫"
            android:icon="@mipmap/scan"/>
        <item
            android:id="@+id/code"
            android:title="二维码分享"
            android:icon="@mipmap/code"/>
        <item
            android:id="@+id/about"
            android:icon="@mipmap/about"
            android:title="关于软件" />
    </group>
</menu>

四、设置toolbar主题和顶部主题

4b718c4354fcd058f8229839db47b9b6.png

五、万事俱备,开始编写逻辑代码

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
    //drawerLayout
    private DrawerLayout drawerLayout;
    //侧滑菜单栏
    private NavigationView navigationView;
    private Toolbar mtoolbar;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }
 
    public void initView() {
        mtoolbar =findViewById(R.id.mToolbar);
        setSupportActionBar(mtoolbar);
        //侧滑相关
        drawerLayout = findViewById(R.id.drawer_layout);
        navigationView = findViewById(R.id.nav);
        navigationView.setNavigationItemSelectedListener(this);
        //切换菜单,注意第三个和第四个参数,需要在string里面声明,注意把toolbar参数放进去不然就没有切换的那个按钮
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this,
                drawerLayout, mtoolbar,
                R.string.openDrawerContentDescRes,
                R.string.closeDrawerContentDescRes);
        //切换菜单的动画
        drawerLayout.addDrawerListener(toggle);
        //同步状态
        toggle.syncState();
        //开启手势滑动打开侧滑菜单栏,如果要关闭将后面的UNLOCKED替换成LOCKED_CLOSED就可以了
        drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
    }
 
    //在这可以写你想要的点击事件
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.voice_switch:
                break;
            case R.id.version:
                break;
            case R.id.location:
                break;
            case R.id.about:
                break;
            case R.id.scan:
                break;
            case R.id.code:
                break;
        }
        return true;
    }
}
 

68965328f8b11bac31cf511dff254d9f.png
实现Android侧滑菜单有多种方式,其中一种比较常见的实现方式是使用DrawerLayout和NavigationView。 步骤如下: 1. 在XML布局文件中添加DrawerLayout和NavigationView,其中NavigationView中可以添加菜单项。 ``` <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 主界面内容 --> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- 侧滑菜单 --> <android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header" app:menu="@menu/nav_menu" /> </android.support.v4.widget.DrawerLayout> ``` 2. 在Activity中设置DrawerLayout和NavigationView的监听器,并在onOptionsItemSelected方法中处理菜单项点击事件。 ``` public class MainActivity extends AppCompatActivity { private DrawerLayout mDrawerLayout; private NavigationView mNavigationView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDrawerLayout = findViewById(R.id.drawer_layout); mNavigationView = findViewById(R.id.navigation_view); mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { // 处理菜单项点击事件 return false; } }); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, mDrawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); mDrawerLayout.addDrawerListener(toggle); toggle.syncState(); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == android.R.id.home) { mDrawerLayout.openDrawer(GravityCompat.START); return true; } return super.onOptionsItemSelected(item); } } ``` 3. 在NavigationView中添加菜单项,并为菜单项设置图标和标题。 ``` <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="single"> <item android:id="@+id/nav_home" android:icon="@drawable/ic_home" android:title="Home" /> <item android:id="@+id/nav_gallery" android:icon="@drawable/ic_gallery" android:title="Gallery" /> <item android:id="@+id/nav_slideshow" android:icon="@drawable/ic_slideshow" android:title="Slideshow" /> </group> </menu> ``` 至此,实现了一个简单的Android侧滑菜单。如果要实现仿QQ侧滑删除功能,可以在ListView或RecyclerView中添加滑动删除的功能,并在删除时更新侧滑菜单中的未读消息数等信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值