使用DrawerLayout实现双向侧滑菜单

双向侧滑菜单实现教程:使用DrawerLayout组件 在Android应用开发中,用户界面的导航和交互设计至关重要。一个设计优雅、使用便捷的导航抽屉可以显著提升用户体验。是一个提供了侧滑抽屉式导航功能的布局组件,使得开发者能够在应用中轻松实现复杂的导航结构。它支持从屏幕边缘滑出的侧边栏,通常用来放置应用的菜单项或快捷方式。本章首先介绍DrawerLayout组件的基础知识,包括它的设计理念和应用场景,为后续章节中深入探讨如何在Android应用中实现和优化DrawerLayout组件奠定基础。 阅读详情

前言

  在android开发中,很多的app都有使用侧滑菜单,有的是自定义控件来实现侧滑菜单,但是android给我们提供了DrawerLayout类来实现侧滑菜单,侧滑效果很好,今天我就说说怎么去使用它来实现侧滑菜单。

实现

  我们先来看一下效果图:


  这里我们实现的双向侧滑菜单,在界面上部加入了两个按钮,点击就会打开菜单或者关闭菜单,当然也可以自己去滑动。
  布局文件的代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout 
        android:layout_width="fill_parent"
        android:layout_height="45dp"
        android:background="#00ff00"
        >
        <Button 
            android:id="@+id/btn_toggle_left"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:text="左开关"
            />
        <Button 
            android:layout_alignParentRight="true"
            android:id="@+id/btn_toggle_right"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:text="右开关"
            />
    </RelativeLayout>
    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawerlayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
        <!-- 主布局,位于DrawerLayout的第一次子控件,位置不可以放错 -->
        <FrameLayout 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            >
            <ImageView 
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:background="@drawable/mainbackground"
                />
        </FrameLayout>
        <!-- 左侧菜单 -->
        <RelativeLayout
            android:id="@+id/layout_menu_left"
            android:layout_gravity="start" 
            android:layout_width="150dp"
            android:layout_height="fill_parent"
            android:background="#000"
            >
            <TextView
                android:textColor="#ffffff"
                android:gravity="center"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:text="左侧菜单"
                />
        </RelativeLayout>
        <!-- 右侧菜单 -->
        <RelativeLayout
            android:id="@+id/layout_menu_right"
            android:layout_gravity="end" 
            android:layout_width="150dp"
            android:layout_height="fill_parent"
            android:background="#000"
            >
            <TextView
                android:textColor="#ffffff"
                android:gravity="center"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:text="右侧菜单"
                />
        </RelativeLayout>

    </android.support.v4.widget.DrawerLayout>
</LinearLayout>

  MainActivity的代码:

public class MainActivity extends Activity implements OnClickListener{

    private DrawerLayout mDrawerLayout;
    private View v_menu_left,v_menu_right;
    private Button btn_left,btn_right;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initListener();
    }

    private void initListener() {
        btn_left.setOnClickListener(this);
        btn_right.setOnClickListener(this);
    }

    private void initView() {
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);
        v_menu_left = findViewById(R.id.layout_menu_left);
        v_menu_right = findViewById(R.id.layout_menu_right);
        btn_left = (Button) findViewById(R.id.btn_toggle_left);
        btn_right = (Button) findViewById(R.id.btn_toggle_right);
    }

    @Override
    public void onClick(View v) {
        if(v.getId()==R.id.btn_toggle_left){
            toggleLeft();
        }else if(v.getId()==R.id.btn_toggle_right){
            toggleRight();
        }
    }

    private void toggleRight() {
        if(mDrawerLayout.isDrawerOpen(v_menu_right)){
            mDrawerLayout.closeDrawer(v_menu_right);
        }else{
            mDrawerLayout.openDrawer(v_menu_right);
        }

    }

    private void toggleLeft() {
        if(mDrawerLayout.isDrawerOpen(v_menu_left)){
            mDrawerLayout.closeDrawer(v_menu_left);
        }else{
            mDrawerLayout.openDrawer(v_menu_left);
        }
    }

}

  在布局文件中,第一个子控件是主布局,就是显示在界面中央的位置,然后第二个和第三个控件作为左菜单和右菜单在两侧隐藏,然后滑动的时候慢慢显示出来。在第二和第三个控件的属性设置里,需要注意的是android:layout_gravity属性,这个属性决定了菜单的位置是左还是右。当设置成“start”的时候,菜单位于左侧,当设置成“end”的时候,菜单位于右侧,所以菜单的位置和控件的顺序没有关系,只和属性值有关。

  然后在MainActivity里面,我们得到DrawerLayout
对象,和两个菜单对象,对按钮添加点击方法。拿左菜单来说,当点击按钮的时候,如果左菜单是关闭的,那么我们就打开菜单,如果菜单是打开的,那么我们就关闭它。这就需要知道DrawerLayout的几个常用方法了。

  • isDrawerOpen(View v)
    该方法用来判断菜单是否处于打开状态,传入的是一个View,表示菜单的View,也就是左菜单或者是右菜单。因为菜单的数量有一个或者以上,所以需要传入不同的View来判断是哪一个菜单。

  • closeDrawer(View v)
    该方法用来关闭菜单,传入的也是菜单的View

  • openDrawer(View v)
    该方法用来打开菜单,同关闭菜单的操作相似。

  用这三个方法基本就可以实现上面的效果了,好了,简单的双向侧滑菜单就完成了,不需要使用自定义的控件,自定义的控件可能有更加丰富的动画效果,这就需要大家自己去是实现了。

【源码下载】

仿QQ5.2设计Android双向侧滑DrawerLayout教程 是Android平台上的一个布局组件,主要用于实现侧滑菜单的效果,这种设计广泛用于应用中进行页面导航。开发者可以利用它为应用添加一个可滑动的抽屉,这个抽屉可以在屏幕左侧或右侧滑出,内嵌有导航栏或菜单项。它提供了良好的用户体验以及界面的美观性。为了提高代码的复用性和可维护性,监听器的自定义和封装是非常重要的。我们可以创建一个自定义的来封装这些抽屉状态监听的逻辑:@Override@Override@Override@Override。 阅读详情

相关推荐

Android DrawerLayout 高仿QQ5.2双向侧滑菜单程序文件

代码为博客的示例代码,有问题请博客留言http://blog.youkuaiyun.com/lmj623565791/article/details/41531475。

Android DrawerLayout 高仿QQ5.2双向侧滑菜单

转载请标明出处:http://blog.youkuaiyun.com/lmj623565791/article/details/41531475,本文出自:【张鸿洋的博客】1、概述 之前写了一个Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭,恰逢QQ5.2又加了一个右侧菜单,刚好看了下DrawerLayout,一方面官方的东西,我都比较感兴趣;另一方面,这玩意用起来的确方便,于是简单写了个de...

modabobo 370

使用DrawerLayout制作仿QQ6.0双侧滑菜单

使用DrawerLayout制作仿QQ6.0双侧滑菜单,并且增加了可滑动范围。

Android 实现形态各异的双向侧滑菜单 自定义控件来袭

转载请标明出处:http://blog.youkuaiyun.com/lmj623565791/article/details/39670935,本文出自:【张鸿洋的博客】 1、概述 关于自定义控件侧滑已经写了两篇了~~今天决定把之前的单向改成双向,当然了,单纯的改动之前的代码也没意思,今天不仅会把之前的单向改为双向,还会多添加一种侧滑效果,给大家带来若干种形态各异的双向侧滑菜单,不过请放心,代码会很简单~~...

modabobo 279

Android利用DrawerLayout实现侧滑菜单

Android利用DrawerLayout实现侧滑菜单

【STM32H7实战】SDMMC总线优化与FatFs文件系统高效读写技巧

本文详细介绍了STM32H7中SDMMC总线优化与FatFs文件系统高效读写技巧,包括时钟配置、DMA传输、缓存策略等关键优化点。通过实测数据对比,展示了从2.7MB/s提升至11.8MB/s读取速度的优化效果,适用于需要高性能SD卡读写的嵌入式开发场景。

e6f7g8h9i的博客 483

android效仿qq侧滑菜单,Android使用DrawerLayout实现仿QQ双向侧滑菜单

1、概述之前写了一个Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭 ,恰逢QQ5.2又加了一个右侧菜单,刚好看了下DrawerLayout,一方面官方的东西,我都比较感兴趣;另一方面,这玩意用起来的确方便,于是简单写了个demo,高仿QQ5.2双向侧滑,分享给大家。首先看看效果图:DrawerLayout用起来真的很方便,下面一起看看用法~2、DrawerLayout的使用直接将D...

weixin_34281501的博客 342

在mac OS下安装SQL Developer

最近一直在折腾Oracle数据库,但由于电脑是mac系统,plsql developer用不了,远程管理一直不是很方便。后来听说Navicat不错,就也装了个试试看,发现界面看起来确实不错。今天心血来潮,想试试oracle自己开发的client。用惯plsql developer的人也可以来试试看,毕竟是自己人开发的,兼容性应该会不错吧。下面就把安装过程分享给新手或者需要帮助的朋友。 1.

bonbonboo的专栏 2万+

Androi ActionBarDrawerToggle&DrawerLayout双向侧滑动

本实践在于练习使用ActionBarDrawerToggle+DrawerLayout实现双向侧滑栏菜单布局 需要的库文件 ...

M_Andrain的博客 119

防止通达信公式被盗?手把手教你用DLL加密+互联网验证(含易语言后台管理)

本文详细介绍了如何通过DLL加密与互联网验证技术保护通达信公式安全。从DLL加密实现、设备绑定到易语言后台管理,提供了一套完整的防护方案,有效防止公式被盗用。重点讲解了互联网验证登录和绑定设备等核心技术,帮助量化交易者守护核心资产。

weixin_29323551的博客 501

Unable to negotiate with XXXX port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

打开ssh_config此文件,滑动到最下面,新增自己git主机地址(这里我直接默认*)执行命令 git clone git@xxxxxxxxxxxxx.git。代码仓库已经添加了ssh公钥之后,克隆代码到本地时就报了这个问题。首先是找到git安装目录(根据自己安装时选项,找到这个目录)再进入ssh目录,找到 ssh_config 配置文件。配置完成后,保存配置文件后再次去clone代码。直接复制下面这一段到文件中最底部位置即可。然后进入 etc目录,找到ssh目录。终于可以克隆下来了。

萌兔兔MMQ!! 3356

Android DrawerLayout 高仿QQ5 2双向侧滑菜单

Android DrawerLayout 高仿QQ5 2双向侧滑菜单

sdfwcc的博客 144

AD20丝印层导入图片logo保姆级教程(附黑白预览避坑技巧)

本文提供了一份详尽的AD20丝印层导入图片Logo的实战指南。核心在于将图片预处理为高质量的单色BMP位图,并独家分享了利用Windows画图工具进行“黑白预览”的关键技巧,以提前规避转换失真。教程涵盖了从脚本获取、图片处理、参数设置到生产规范的完整流程,帮助硬件工程师高效、准确地在PCB的Top Overlay层添加个性化标识。

weixin_29194255的博客 386
上一篇: 如何快速转载优快云中的博客
下一篇: Fragment与Activity进行通信
潘建成
博客等级 码龄12年 139粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值