У меня есть эта функция в моей основной деятельности, которая не отображает значок:
private fun setFindShiftBadge(state: HomeState) {
val findShiftsBadge = BadgeDrawable.create(this)
home_framelayout.foreground = findShiftsBadge
findShiftsBadge.badgeGravity = BadgeDrawable.TOP_END
findShiftsBadge.backgroundColor = resources.getColor(R.color.colorWhite)
findShiftsBadge.badgeTextColor = resources.getColor(R.color.colorPrimary)
findShiftsBadge.number = state.availableShifts.size
}
В той же деятельности у меня есть эта функция, которая отображает значок:
private fun setMyPostedShiftBadge(state: HomeState) {
val userShiftsBadge: BadgeDrawable =
bottom_navigation_view.getOrCreateBadge(R.id.bottom_navigation_my_posted_shifts_text)
userShiftsBadge.number = state.userShifts.size
userShiftsBadge.backgroundColor = resources.getColor(R.color.colorPrimary)
}
Теперь я понимаю, что вторая функция работает, потому что значок установлен в пределах BottomNavigationView
. По иронии судьбы, BottomNavigationView
расширяется FrameLayout
. В документации Android: Добавьте BadgeDrawable в качестве ViewOverlay к желаемому представлению привязки, используя attachBadgeDrawable (BadgeDrawable, View, FrameLayout). Обновите координаты BadgeDrawable BadgeDrawable (центр и границы) на основе его привязки, используя updateBadgeCoordinates (View, ViewGroup).
Говорят, что использовать этот код, For API 18+ (APIs supported by ViewOverlay)
, который я использую в первой функции, которая не работает:
BadgeDrawable badgeDrawable = BadgeDrawable.create(context);
BadgeUtils.attachBadgeDrawable(badgeDrawable, anchor, null);
Я также пробовал это решение , но оно тоже не сработало. Я знаю, что есть обходные пути, такие как:
- Создание рисованного объекта и установка его на желаемом виде
- Размещение TextView внутри этого чертежа, который затем обновляется с номером Вы хотите
- Переключить видимость рисования, когда есть какие-либо числа.
Я на implementation 'com.google.android.material:material:1.2.0-alpha04'
Это кажется мне грязным, так как я знаю, что есть лучший способ сделать это. Я просто не могу понять это. Что мне не хватает? Это вообще возможно? Как вы смогли сделать это без необходимости писать обходной путь? Спасибо за ваше время! Будем рады учиться на ваших вопросах и ответах! Имейте фантазию c день!