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_IDLE、STATE_DRAGGING、STATE_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()控制两种指示器的开关。菜单项通常继承BaseAdapter在getView()里调用,参考 MenuAdapter.java:
DuoOptionView optionView = new DuoOptionView(parent.getContext()); optionView.bind(option, null, null);DuoDrawerToggle 联动:汉堡菜单动画的接入方法
DuoDrawerToggle(源码:DuoDrawerToggle.java)是官方ActionBarDrawerToggle的改造版,让 Toolbar 图标在汉堡与箭头间平滑切换,接入只需三步:
- 构造:
new DuoDrawerToggle(activity, drawerLayout, toolbar, openDesc, closeDesc) - 监听:
drawerLayout.setDrawerListener(drawerToggle) - 同步:在
onPostCreate中调用drawerToggle.syncState()
别忘了在onConfigurationChanged与onOptionsItemSelected中转调对应方法。常用开关还有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),仅供参考