当前位置: 首页 > news >正文

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),仅供参考

http://www.cnnetsun.cn/news/4085504.html

相关文章:

  • VBrowser-Android是什么?一款全网视频嗅探缓存APP的完整入门指南
  • SingGuard-NSFA-0.8B 的7个分类头详解:每个风险域如何独立检测与输出风险概率
  • 让AI控制电脑成为日常:UI-TARS Desktop零代码自动化工具完整上手攻略
  • 基于Python的旅游攻略分享平台系统网站(源代码+文档+PPT+调试+讲解)
  • 显卡频繁崩溃别再猜了:GPU显存测试免费工具 memtest_vulkan,5分钟锁定真凶
  • 为什么我建议每个 Mac 用户都试试 Topit?窗口置顶 30 分钟上手全记录
  • DotNetIsolator序列化原理深挖:MessagePack如何跨越宿主与沙箱传递任意对象
  • 为什么缓存会占满内存?Linux Page Cache原理与hcache的答案
  • Andy.scss 进阶指南:如何基于现有代码扩展属于自己的 SASS Mixins
  • FanControl快速上手指南:3分钟掌控Windows风扇转速曲线
  • AutoCAD字体缺失问题怎么解?FontCenter插件一劳永逸的完整指南
  • 大气层系统从入门到精通:Switch 自制固件完整实战避坑指南
  • 在ESP32上跑起OpenCV图像处理:新手也能一次成功的完整实战指南
  • NCSA Mosaic 2.7 的开源遗产:它对现代Web的10大深远贡献
  • 复现HMMR论文训练:从下载5大数据集到运行do_train.sh的一站式实操教程
  • 磁盘清理终极指南:Czkawka 14 个工具一次讲透,重复文件、相似图片、视频瘦身一步到位
  • 一副普通眼镜如何变成AI助手?OpenGlass 25元开源改造方案全解析
  • 用JSON定义游戏界面:FlatUI序列化功能完整上手教程
  • 开发效率提升300%:这套SpringBoot3+Vue3脚手架让你的项目快速启动
  • BilibiliDown使用指南:收藏夹300条内容一键落地的离线视频备份方案
  • Python进阶 - sys模块 退出程序与异常信息获取
  • 用 relly 学 Rust 系统编程:零拷贝与安全内存操作实战
  • lainTSX 是什么:在浏览器中游玩《Serial Experiments Lain》PSX 游戏的完整指南
  • 认识 LightningJS:第三方JavaScript嵌入方案如何同时做到安全、快速与异步?
  • stdarch测试体系全览:C/Rust随机对拍、反汇编断言与20+架构的CI矩阵
  • 【单片机毕业设计】基于 STM32 或 51 单片机的多传感融合智能学习照明设备设计 基于 STM32 或 51 单片机的带时钟定时功能智能护眼装置设计与实现(021303)
  • Milvus 迁移到 RAG:先守住索引和评测口径
  • 告别录屏几小时,m3u8-downloader 让 M3U8 视频下载一条命令搞定
  • DistroAV(OBS-NDI)插件“Runtime缺失“全场景自救指南:从零上手到进阶调优的完整路线图
  • ManyDepth位姿估计网络解析:PoseCNN如何为多帧深度估计提供关键几何信息