Toolbar菜单项BadgeDrawable结合LiveData更新的异常及用法咨询
Toolbar操作项动态徽章实现问题
需求背景
- 目标:在Toolbar操作项上展示数字徽章,徽章数值由LiveData驱动,随数据变化实时更新
- 当前实现代码:
BadgeUtils.attachBadgeDrawable(inboxBadgeDrawable, toolbar, R.id.menu_inbox) - 已尝试的挂载时机:
- Activity的
onCreateOptionsMenu()回调 - Activity的
onPrepareOptionsMenu()回调 - LiveData的
Observer.onChanged()回调
- Activity的
现存异常
当Toolbar结构或徽章内容发生任意变更时,会出现以下问题:
- 徽章位置错位,整体向左下方偏移
- 徽章重复显示在其他操作项上
问题原因推测
结合BadgeUtils的实现逻辑推断:
- 挂载流程会查找Toolbar内部对应
R.id.menu_inbox的容器视图,插入徽章后计算偏移量完成定位 - 当菜单项对应容器视图发生复用或重建时,旧容器上会残留之前挂载的徽章,现有API没有提供可靠的旧徽章移除入口
- 徽章的位置偏移量存在叠加计算逻辑,多次调用挂载方法时偏移值会不断累积
咨询内容
- 是否存在官方推荐的、适配Toolbar操作项图标的
BadgeDrawable动态更新实现方案 - 已知Badge相关特性处于实验阶段,当前项目使用的依赖版本为
com.google.android.material:material:1.3.0-beta01,咨询上述错位问题是否会被官方纳入修复范围,以及对应的处理排期 - 已按照官方组件仓库的反馈指引,向组件开发团队反馈了实际使用问题,并在项目issue跟踪平台提交了对应特性请求,关联issue编号为#1967
内容的提问来源于stack exchange,提问作者Oderik
相关产品推荐
相关产品推荐

