android - 徽章绘图未显示
问题描述
为什么BadgeDrawable没有显示在任何地方?我正在尝试添加MaterialCardView
等MaterialButton
。它没有显示。任何人都知道如何解决这个问题?或者有相同的库来替换它?
这是代码:
val badgeDrawable = BadgeDrawable.create(holder.itemView.context)
badgeDrawable.number = 10
badgeDrawable.badgeGravity = BadgeDrawable.TOP_END
badgeDrawable.backgroundColor = holder.itemView.context.getColor(R.color.colorAccent)
holder.itemView.home_cardview.overlay.add(badgeDrawable)
badgeDrawable.updateBadgeCoordinates(holder.itemView.home_cardview, null)
这种方法也不起作用:
BadgeUtils.attachBadgeDrawable(badgeDrawable, anchor, null);
顺便说一下,在新版本中 compatBadgeParent 是必填字段
解决方案
您可以将 a 应用BadgeDrawable
到 aMaterialCardView
或 aMaterialButton
使用布局:
<FrameLayout
android:id="@+id/layout"
android:clipChildren="false"
android:clipToPadding="false"
..>
<com.google.android.material.card.MaterialCardView
android:id="@+id/card"
.../>
</FrameLayout>
然后就用方法了BadgeUtils.attachBadgeDrawable
。
例如CardView
:
MaterialCardView cardview = findViewById(R.id.card);
cardview.setClipToOutline(false); //Important with a CardView
cardview.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
BadgeDrawable badgeDrawable = BadgeDrawable.create(MainActivity.this);
badgeDrawable.setNumber(15);
BadgeUtils.attachBadgeDrawable(badgeDrawable, cardview, findViewById(R.id.layout));
cardview.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
对于一个Button
:
<FrameLayout
android:id="@+id/layout"
android:clipChildren="false"
android:clipToPadding="false">
<com.google.android.material.button.MaterialButton
android:id="@+id/button"
../>
</FrameLayout>
然后是类似的代码:
button.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
BadgeDrawable badgeDrawable = BadgeDrawable.create(MainActivity.this);
badgeDrawable.setNumber(7);
badgeDrawable.setBackgroundColor(......);
badgeDrawable.setVerticalOffset(20);
badgeDrawable.setHorizontalOffset(15);
BadgeUtils.attachBadgeDrawable(badgeDrawable, button, findViewById(R.id.layout));
button.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
推荐阅读
- python - 如何在 Python 中编写缓存函数或等效函数?
- git - Git diff 命令文档
- amazon-web-services - 是否有可能达到 Lambda 调用限制(10000)而不达到其并发限制(1000)?
- java - RecyclerView 的 SearchView 不起作用
- html - 我的网站无法显示 firebase 实时数据库数据
- python - python延迟加载模式使用循环中的最后一个值
- css - 如何将卡片垂直排列成两列
- react-native - 如何在wix Navigation中将道具传回父组件
- php - Laravel msql配置%db_name%缓存问题
- mql4 - 如何分离 2 Close[1]?