【问题标题】:LiveData update of BadgeDrawable in ToolBar MenuItemToolBar MenuItem 中 BadgeDrawable 的 LiveData 更新
【发布时间】:2021-04-12 07:03:25
【问题描述】:

我想在工具栏操作上显示一个徽章。徽章编号由 LiveData 值更新。

这是我附加徽章的方式:

BadgeUtils.attachBadgeDrawable(inboxBadgeDrawable, toolbar, R.id.menu_inbox);

我为那个电话尝试了不同的地方,包括Activity.onCreateOptionsMenu()Activity.onPrepareOptionsMenu()androidx.lifgecycle.Observer.onChanged()

当发生任何变化(工具栏或徽章内容)时,徽章就会错位,向左下方移动。或者它被复制到另一个动作。

我猜attachBadgeDrawable 试图在工具栏中找到R.id.menu_inbox 的容器视图,插入徽章并更新它的偏移量。如果菜单项的容器视图发生变化,旧的容器视图仍然有旧的徽章,并且没有(明智的)方法可以删除它。此外,偏移量的应用似乎是叠加的。

那么,在工具栏操作图标上使用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

【问题讨论】:

    标签: android android-toolbar material-components-android badge


    【解决方案1】:

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

    // 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)
            }
        }
    }
    

    【讨论】:

    • 谢谢!我会研究一下 - 但我目前正在做一个不同的项目。
    • 不是我最终喜欢的解决方案,但它现在有效。非常感谢@Varvara-Kalinina!
    猜你喜欢
    • 2014-12-17
    • 2022-01-14
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    相关资源
    最近更新 更多