news 2026/8/18 16:16:30

Duo Navigation Drawer API 速查手册:核心方法与接口一网打尽

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Duo Navigation Drawer API 速查手册:核心方法与接口一网打尽

Duo Navigation Drawer API 速查手册:核心方法与接口一网打尽

【免费下载链接】duo-navigation-drawerA flexible, easy to use, unique drawer library for your Android project.项目地址: https://gitcode.com/gh_mirrors/du/duo-navigation-drawer

Duo Navigation Drawer 是一款专为 Android 项目打造的灵活、易用且极具辨识度的抽屉导航库:它不像传统抽屉那样覆盖在内容之上,而是让主内容向右滑开,露出底层菜单,并自动附带内容缩放、菜单淡入等细腻动效。无论你是首次接触还是想快速回顾,这份 Duo Navigation Drawer API 速查手册都能帮你把核心方法与接口一网打尽,开箱即用。

快速认识:四大核心类的职责分工

先记住四个类,整个库的 API 就都在它们身上:

类名职责
DuoDrawerLayout抽屉容器,负责滑动手势、开合动画、缩放效果与状态管理
DuoMenuView菜单视图,绑定数据适配器、处理头部/底部/选项点击
DuoOptionView单个菜单项,负责文字绑定与选中态指示器
DuoDrawerToggle抽屉开关,驱动 Toolbar 上的汉堡菜单动画

核心源码集中在views/widgets/两个目录下,配合本文逐一看即可。

DuoDrawerLayout 开合与状态:最常用的 5 个方法

DuoDrawerLayout的 API 与官方DrawerLayout高度兼容,上手几乎零成本,源码见 DuoDrawerLayout.java。

方法作用
openDrawer()带动画打开抽屉
closeDrawer()带动画关闭抽屉
isDrawerOpen()抽屉是否完全展开
isDrawerVisible()抽屉是否可见(拖拽中即为 true)
setDrawerLockMode(int)锁定/解锁抽屉手势

锁定模式用三个常量:LOCK_MODE_UNLOCKED(默认,可自由滑动)、LOCK_MODE_LOCKED_CLOSED(锁定关闭)、LOCK_MODE_LOCKED_OPEN(锁定展开)。抽屉状态则对应STATE_IDLESTATE_DRAGGINGSTATE_SETTLING三个常量。

duoDrawerLayout.openDrawer(); duoDrawerLayout.setDrawerLockMode(DuoDrawerLayout.LOCK_MODE_LOCKED_CLOSED);

视图获取与动态替换:getMenuView / setContentView

抽屉里的菜单和内容视图都能随时获取或热替换:

  • getMenuView()/setMenuView(View):取得或替换菜单视图
  • getContentView()/setContentView(View):取得或替换内容视图

注意:替换的 View 不能已有父容器,否则会抛出IllegalStateException。日常开发最常见的写法,是从布局中先拿到DuoDrawerLayout,再取出内置的DuoMenuView

DuoDrawerLayout drawerLayout = findViewById(R.id.drawer); DuoMenuView duoMenuView = (DuoMenuView) drawerLayout.getMenuView();

动画效果配置方法:缩放、透明度与边距一网打尽

这是 Duo 系列最出彩的地方——所有动效参数都提供了对应 setter,运行时可随意调整:

  • 内容缩放:setContentScaleClosed()(关闭时 1.0)、setContentScaleOpen()(打开时 0.7)
  • 菜单缩放:setMenuScaleClosed()(关闭时 1.1)、setMenuScaleOpen()(打开时 1.0)
  • 菜单透明度:setMenuAlphaClosed()(默认 0.0 全透明)、setMenuAlphaOpen()(默认 1.0)
  • 点击关闭层缩放:setClickToCloseScale()(默认 0.7)
  • 内容露出比例:setMarginFactor()(默认 0.7,设为 1.0 则内容完全滑出屏幕)
duoDrawerLayout.setContentScaleOpen(0.8f); duoDrawerLayout.setMarginFactor(0.75f);

XML 属性对照表:布局里直接定制动效

不想写代码?这些属性都可以直接在 XML 中声明(定义见 attr.xml):

属性说明默认值
app:menu/app:content菜单/内容布局引用
app:contentScaleClosed/contentScaleOpen内容关闭/打开时缩放1.0 / 0.7
app:menuScaleClosed/menuScaleOpen菜单关闭/打开时缩放1.1 / 1.0
app:menuAlphaClosed/menuAlphaOpen菜单透明度0.0 / 1.0
app:clickToCloseScale点击关闭层缩放0.7
app:marginFactor内容露出比例0.7

DuoMenuView 用法:适配器数据源与点击回调

DuoMenuView(源码:DuoMenuView.java)本身就是一个 ViewGroup,菜单项通过适配器填充:

  • setAdapter(Adapter)/getAdapter():设置菜单数据源,数据变化自动刷新
  • setOnMenuClickListener(OnMenuClickListener):注册点击监听
  • setHeaderView(int)/setFooterView(int):动态设置头部/底部布局
  • setBackground(int):动态更换背景 Drawable

点击回调OnMenuClickListener是核心接口,三个方法覆盖全部交互场景:

duoMenuView.setOnMenuClickListener(new DuoMenuView.OnMenuClickListener() { @Override public void onOptionClicked(int position, Object objectClicked) { // 菜单项被点击:切换 Fragment、更新选中态、关闭抽屉 } @Override public void onHeaderClicked() { /* 头部被点击 */ } @Override public void onFooterClicked() { /* 底部按钮被点击 */ } });

参考MainActivity的完整串联写法,可看 MainActivity.java。

DuoOptionView 绑定方法:bind 三种重载一网打尽

DuoOptionView代表单个菜单项(源码:DuoOptionView.java),核心是三种bind()重载:

重载效果
bind(String)仅设置文字,无指示器
bind(String, Drawable)文字 + 选中态圆形指示器
bind(String, Drawable, Drawable)文字 + 圆形指示器 + 侧边矩形指示器

配套的选中态 API 有setSelected(boolean)/isSelected(),以及setSelectorEnabled()setSideSelectorEnabled()控制两种指示器的开关。菜单项通常继承BaseAdaptergetView()里调用,参考 MenuAdapter.java:

DuoOptionView optionView = new DuoOptionView(parent.getContext()); optionView.bind(option, null, null);

DuoDrawerToggle 联动:汉堡菜单动画的接入方法

DuoDrawerToggle(源码:DuoDrawerToggle.java)是官方ActionBarDrawerToggle的改造版,让 Toolbar 图标在汉堡与箭头间平滑切换,接入只需三步:

  1. 构造:new DuoDrawerToggle(activity, drawerLayout, toolbar, openDesc, closeDesc)
  2. 监听:drawerLayout.setDrawerListener(drawerToggle)
  3. 同步:在onPostCreate中调用drawerToggle.syncState()

别忘了在onConfigurationChangedonOptionsItemSelected中转调对应方法。常用开关还有setDrawerIndicatorEnabled(boolean)(是否显示动画指示器)与setHomeAsUpIndicator(...)(自定义 Up 图标)。

速查清单:照着写就对了

  • 🚀 开合抽屉:openDrawer()/closeDrawer()/isDrawerOpen()
  • 🔒 手势控制:setDrawerLockMode(LOCK_MODE_*)
  • 🎨 动效定制:内容缩放、菜单缩放、透明度、marginFactor
  • 📋 菜单数据:DuoMenuView.setAdapter()+setOnMenuClickListener()
  • 🧩 菜单项渲染:DuoOptionView.bind()三种重载
  • 🍔 工具栏联动:DuoDrawerToggle构造 +syncState()

掌握了这份 Duo Navigation Drawer API 速查手册,无论是搭建新项目还是排查旧代码,你都能快速定位到正确的方法与接口,把这款独特的抽屉导航库用出花来。

【免费下载链接】duo-navigation-drawerA flexible, easy to use, unique drawer library for your Android project.项目地址: https://gitcode.com/gh_mirrors/du/duo-navigation-drawer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/18 16:16:28

VBrowser-Android是什么?一款全网视频嗅探缓存APP的完整入门指南

VBrowser-Android是什么?一款全网视频嗅探缓存APP的完整入门指南 【免费下载链接】VBrowser-Android 全网视频嗅探缓存APP 项目地址: https://gitcode.com/gh_mirrors/vb/VBrowser-Android VBrowser-Android 是一款开源的全网视频嗅探缓存APP,它的…

作者头像 李华
网站建设 2026/8/18 16:14:33

基于Python的旅游攻略分享平台系统网站(源代码+文档+PPT+调试+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

作者头像 李华