所谓的滑动菜单就是将一些菜单选型隐藏起来,而不是放在主屏幕上,而是通过滑动的方式将菜单显示出来。

所用到的控件:DrawerLayout


DrawerLayout

一种布局,此布局中放入两个直接子控件,第一个是显示主屏幕的所显示的内容;第二个是滑动菜单中现实的内容

<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.DrawerLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_height="match_parent"android:layout_width="match_parent"android:id="@+id/a4"><FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="?attr/colorPrimary"android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /></FrameLayout><FrameLayoutandroid:layout_width="250dp"android:layout_height="match_parent"android:layout_gravity="start"android:background="#ffffff"><TextViewandroid:layout_gravity="start"android:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/nav_view"/></FrameLayout>
</android.support.v4.widget.DrawerLayout>

由以上代码我们可以看出两个子控件都是FrameLayout

其中第二个控件中我们需要注意Android:layout_gravirty是必须要设置的,以为它决定了侧滑界面的方向。它有三个属性:

Start:根据语言自定决定

Right:右

Lift:左


给侧滑界面加一个导航键,改动MainActivity中的代码:

  mDrawerLayout=(DrawerLayout)findViewById(R.id.a4);ActionBar actionBar=getSupportActionBar();if(actionBar!=null){actionBar.setDisplayHomeAsUpEnabled(true);}
...........
public boolean onOptionsItemSelected(MenuItem item)
{switch (item.getItemId())//判断点击那一个菜单{case android.R.id.home:mDrawerLayout.openDrawer(GravityCompat.START);break;
.............

分析以上代码:

首先得到DrawerLayout实例,然后调用getSupportActionBar()得到ActionBar实例,

然后调用ACtionBar的setDisplayHomeAsUpEnable()方法让导航栏显示出来

接下来在onOptionsItemSelected()方法为其设置点击事件,HomeAsUp按钮的id永远都是android.R.id.home,

在调用用DrawableLayout的openDrawable()方法,这里传入一个gravirty的参数,为了保持一致,我们传入Start


NavigationView:

谷歌为我们提供了一种可以将滑动菜单页面的实现变得简单的控件——NavigationView

此控件是Design Support库中提供的,所以我们要将这个库引入到项目中

compile 'com.android.support:design:25.3.1'
compile 'de.hdodenhof:circleimageview:2.1.0'

第一个是Design Support库,

第二个是将图片圆形化的功能


除此之外

还需要准备一个菜单文件与一个头布局

新建nav_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single"><itemandroid:id="@+id/b1"android:title="了解会员特权"/><itemandroid:id="@+id/b2"android:title="QQ钱包"/><itemandroid:id="@+id/b3"android:title="个性装扮"/><itemandroid:id="@+id/b4"android:title="我的收藏"/><itemandroid:id="@+id/b5"android:title="我的相册"/>
</group>
</menu>

我们在<menu>中嵌套了一个<group>,并将group的checkableBehavior属性指定为single,表示内容只可单选

接下来看头布局,新建一个nav_header.xml,并准备一张图片作为头像

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="180dp"android:padding="10dp"android:background="@mipmap/bk"><de.hdodenhof.circleimageview.CircleImageViewandroid:id="@+id/p1"android:layout_width="70dp"android:layout_height="70dp"android:src="@mipmap/qwe"android:layout_centerInParent="true"/><TextViewandroid:id="@+id/mail"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:text="ID:1399663177"android:background="#FFF"android:textSize="14sp"/><TextViewandroid:id="@+id/username"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="辫儿哥哥"android:layout_above="@id/mail"android:textColor="#FFF"android:textSize="14sp"/></RelativeLayout>

这里需要注意的是CircleImageView,将传入的图片圆形化,用法和ImageView相同

准备工作完成,接下来使用NavigationView,修改activity_Main.xml中代码,原理是将Dreamweaver布局的第二个子布局换为NavigationView控件

<FrameLayoutandroid:layout_width="250dp"android:layout_height="match_parent"android:layout_gravity="start"android:background="#ffffff"><android.support.design.widget.NavigationViewandroid:layout_gravity="start"android:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/nav_view"app:menu="@menu/nav_menu"app:headerLayout="@layout/nav_header"/>
</FrameLayout>

通过将app:menu与app:headerLayout设置进来

整体布局已经搭建好了,最后我们再为其添加一个简单的点击事件

在MainActivity中的onCreate()方法中添加

NavigationView navigationView=(NavigationView)findViewById(R.id.nav_view);
navigationView.setCheckedItem(R.id.b1);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {@Overridepublic boolean onNavigationItemSelected(@NonNull MenuItem item) {mDrawerLayout.closeDrawers();return false;}
});

首先获得NavigationView实例,再调用setCheckItem()方法选中菜单第一个参数,再调用监听器。。。

整体布局已经搭建好了!

为了美观,我们将以前写的登录界面也加进来 如下:

qq侧滑界面的实现(DreawerLayout)相关推荐

  1. Android 实现QQ侧滑界面之实现

    Android 实现QQ侧滑界面之实现 大家使用过QQ的人都知道侧滑这一动态效果,这种效果布局已经被很多app都使用,今天就交大家如何实现这种效果.先看看效果图 项目整体结构 Layout文件布局 / ...

  2. 仿QQ侧滑菜单(二)

    在(一)https://blog.csdn.net/qq_36551426/article/details/80427352中讲了一下DrawerLayout的简单概念,但是这并不足以让我们去做一个完 ...

  3. 用combobox扩展控件(dsCtrlComboBox)做出类似QQ登录界面的效果

    原文地址:http://www.uieasy.cn/blog/?p=513 传统的combobox 在使用方面有很多限制,很难满足我们combobox类型控件的需求.主要表现中combobox内置的l ...

  4. Android仿QQ侧滑菜单

    先上效果图: GIF图有点模糊,源码已上传Github:Android仿QQ侧滑菜单 ####整体思路: 自定义ItemView的根布局(SwipeMenuLayout extends LinearL ...

  5. java qq登录界面_用java实现QQ登录界面怎么写

    展开全部 用32313133353236313431303231363533e78988e69d8331333365646263java做QQ登录界面的写法如下: package ch10; impo ...

  6. C语言实现类似QQ聊天界面抖动功能

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104991863 实 ...

  7. Swift实战-小QQ(第2章):QQ侧滑菜单

    QQ侧滑实现架构: 需要建立以下几个ViewController: 1.XQBaseViewController  2.LeftViewController 3.RightViewController ...

  8. java仿qq登录 界面设计,Java Swing仿QQ登录界面效果

    本文实例为大家分享了Java Swing仿QQ登录界面展示的具体代码,供大家参考,具体内容如下 闲来无事将早些时候已实现的QQ登录界面再实现了一遍,纯手工打造(意思是没有用NetBeans.MyEcl ...

  9. 点击跳转到QQ聊天界面

    <!--//需要添加好友验证--><a href="tencent://message/?uin=QQ号码&Site=&Menu=yes"> ...

最新文章

  1. “自由主义教皇” 、​Linux 之父的封神之路
  2. pb 如何导出csv_如何计算指数温度?
  3. 在ne中分析贱谈.net中简体转繁体
  4. 如何连接安卓手机_安卓手机如何使用AirPods
  5. 阵列卡正确安装调试方法
  6. 报名开始!第二届中国移动“梧桐杯”大数据应用创新大赛邀你夺52w大奖!
  7. 【Kafka】kafka OutOfMemoryError: Direct buffer memory Java heap space
  8. 利用 Zabbix 监控 mysqldump 定时备份数据库是否成功
  9. 官宣|Apache Flink 1.14.0 发布公告
  10. css3学习笔记之背景
  11. k2 官方纯净版固件
  12. linux下运行springboot项目jar包
  13. 【现代卫星导航系统】之北斗卫星导航系统
  14. Spring Cloud Alibaba - 抽取功能的pojo类
  15. SOP标准作业——让企业持续改善工作
  16. 计算机英语课外知识竞赛,英语知识竞赛活动方案
  17. QtAndroid详解(6):集成信鸽推送
  18. 静态路由和动态路由的融会贯通(思科/华为)
  19. Win11用户名和密码备份方法
  20. 深度学习之梯度裁剪(Gradient Clipping)

热门文章

  1. 【JAVA虚拟机】java虚拟机
  2. android去掉开机锁屏,android 去掉锁屏
  3. CSS3选择器(全)
  4. 实例6.1 六度空间分数 30 DS课程组 单位 浙江大学
  5. setproxy_SetProxy:一个设置IE代理的命令行小工具
  6. 旋转框目标检测mmrotate v0.3.1入门
  7. 怎么才能写出好的代码
  8. 前端开发实习面试题(CSS篇)
  9. PHP+MYSQL 用户注册登录代码
  10. 数字转换为十六进制数