gpt4 book ai didi

android - ToolBar MenuItem 中 BadgeDrawable 的 LiveData 更新

转载 作者:行者123 更新时间:2023-12-04 15:08:50 29 4
gpt4 key购买 nike

我想在工具栏操作上显示一个徽章。徽章编号由 LiveData 更新值(value)。
这就是我附加徽章的方式:

BadgeUtils.attachBadgeDrawable(inboxBadgeDrawable, toolbar, R.id.menu_inbox);
我为那个电话尝试了不同的地方,包括 Activity.onCreateOptionsMenu() , Activity.onPrepareOptionsMenu()androidx.lifgecycle.Observer.onChanged() .
当有任何变化(工具栏或徽章内容)时,徽章会错位,向左下方移动。或者它被复制到另一个 Action 。
我猜 attachBadgeDrawable试图找到 R.id.menu_inbox 的容器 View 在工具栏内,插入徽章并更新它的偏移量。如果菜单项的容器 View 发生变化,旧的容器 View 仍然有旧的徽章,并且没有(明智的)方法可以删除它。此外,偏移量的应用似乎是叠加的。
那么,还有其他使用 BadgeDrawable 的预期方式吗?在工具栏操作图标上?
我了解此功能仍处于试验阶段。这个问题会得到解决吗?如果是,大约需要多长时间? (我现在使用 com.google.android.material:material:1.3.0-beta01。)
这个问题主要针对组件的开发者,因为使用问题应该在这里根据 https://github.com/material-components/material-components-android提出来。 .
编辑:我还在项目的跟踪器上创建了一个问题(功能请求): https://github.com/material-components/material-components-android/issues/1967

最佳答案

我不确定这是否是官方解决方案,但这仍然是一种解决方法。我最终分离了 BadgeDrawable在每个 onPrepareOptionsMenu , 如果菜单项被更改或重新排列

// This is an indicator of whether we need to show the badge or not
private var isFilterOn: Boolean = false

private var filterBadge: BadgeDrawable? = null

@SuppressLint("UnsafeExperimentalUsageError")
override fun onPrepareOptionsMenu(menu: Menu) {
super.onPrepareOptionsMenu(menu)

val filterItem = menu.findItem(R.id.action_filter)
val toolbar = requireActivity().findViewById<Toolbar>(R.id.toolbar)

if(filterBadge != null) {
BadgeUtils.detachBadgeDrawable(filterBadge!!, toolbar, R.id.action_filter)
filterBadge = null
}

if(isFilterOn) {
filterBadge = BadgeDrawable.create(requireContext()).also {
BadgeUtils.attachBadgeDrawable(it, toolbar, R.id.action_filter)
}
}
}

关于android - ToolBar MenuItem 中 BadgeDrawable 的 LiveData 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65597372/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com