BadgeView icon indicating copy to clipboard operation
BadgeView copied to clipboard

badge not hiding on 0 entered.

Open armata99 opened this issue 5 years ago • 5 comments

neither the hide method nor the 0 input can hide the badge...

armata99 avatar Aug 07 '19 10:08 armata99

me ,two

ewgcat avatar Aug 19 '19 12:08 ewgcat

me,too

ewgcat avatar Aug 19 '19 12:08 ewgcat

neither the hide method nor the 0 input can hide the badge...

该问题是因为重复创建了BadgeView。应该让BadgeView只创建一次。

ewgcat avatar Aug 19 '19 12:08 ewgcat

The problem is if (mBadgeNumber < 0) { mBadgeText = ""; in QBadgeView.java

@Override public Badge setBadgeNumber(int badgeNumber) { mBadgeNumber = badgeNumber; if (mBadgeNumber < 0) { mBadgeText = ""; } else if (mBadgeNumber > mMaxBadgeNumber) { mBadgeText = mExact ? String.valueOf(mBadgeNumber) : mMaxBadgeNumber + "+"; } else if (mBadgeNumber > 0) { mBadgeText = String.valueOf(mBadgeNumber); } else { mBadgeText = null; } measureText(); invalidate(); return this; }

Try editing it in your source since apparently the developer ditched the project 2 years ago

hmawla avatar Sep 22 '19 03:09 hmawla

I stumbled upon this issue but found a (rather hacky) way to solve this without having to modifying the library yourself

If you use Kotlin in your project, you can use this extension function snippet

// Extensions
fun QBadgeView.setup(count: Int, targetView: View) {
    this
            .setBadgeNumber(count)
            .setBadgeGravity(Gravity.TOP or Gravity.END)
            // add other setter / options according to your own need
            .bindTarget(targetView)
    if (count == 0) {
        val parent = this.targetView.parent
        if (parent is ViewGroup) {
            parent.children.forEach { child ->
                if (child is QBadgeView) { child.isVisible = false }
            }
        }
    }
}

// Usage
private fun setupView() {
    // val count = someMethodToGetCount()
    // val targetView = the view from findViewById / viewBinding / kotlin_synthetic
    QBadgeView(context).setup(count, targetView)
}

Basically, we just simply set the BadgeView's visibility to GONE when our number / count is 0

val parent = this.targetView.parent // "this" is the BadgeView object
        if (parent is ViewGroup) {
            // Iterate the children to search for BadgeView object
            parent.children.forEach { child ->
                if (child is QBadgeView) { 
                    child.isVisible = false  // If it's a BadgeView, we set visibility to gone, 
                                             // isVisible is just a nicer way to do it from core-ktx library
                                             // otherwise just use setVisibility( ... )
                }
            }
        }

Hope this helpful

hyuwah avatar Oct 13 '20 12:10 hyuwah