我在我的主活动中有这个函数,它无法显示徽章:
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文档中,他们建议使用以下代码:通过attachBadgeDrawable(BadgeDrawable,View,FrameLayout)将BadgeDrawable作为ViewOverlay添加到所需的锚定视图中,在基于其锚定视图的updateBadgeCoordinates(View,ViewGroup)中更新BadgeDrawable BadgeDrawable的坐标(中心和边界)。对于支持ViewOverlay的API 18+(API),可以使用此代码,而我在第一个无效的函数中使用它。 BadgeDrawable badgeDrawable = BadgeDrawable.create(context);
BadgeUtils.attachBadgeDrawable(badgeDrawable, anchor, null);
我也尝试过这个解决方案,但它也不起作用。 我知道有一些解决方法,例如:
- 创建一个可绘制对象,然后将其设置到您想要的视图之上
- 在该可绘制对象内放置一个TextView,然后使用您想要的数字进行更新
- 当有任何数字时,切换可绘制对象的可见性。
implementation 'com.google.android.material:material:1.2.0-alpha04'
版本。这对我来说似乎很麻烦,因为我知道有更好的方法来做到这一点。 我只是似乎无法找出来。 我缺少什么? 这是否可能? 您如何能够在不编写解决方法的情况下完成此操作? 谢谢您的时间!期待从您的问题和答案中学习! 祝您拥有美好的一天!