How to cast BitmapDrawable to LayerDrawable in android -
this code snippet.
public boolean oncreateoptionsmenu(menu menu) { // inflate main; adds items action bar if present. getmenuinflater().inflate(r.menu.main, menu); menuitem item = menu.finditem(r.id.action_notifications); layerdrawable icon = (layerdrawable) item.geticon(); // update layerdrawable's badgedrawable utils2.setbadgecount(this, icon, mnotificationscount); return true; }
it giving error in line
layerdrawable icon = (layerdrawable) item.geticon();
bitmapdrawable cannot cast android.graphics.drawable.layerdrawable
how cast bitmapdrawable layer layerdrawable?
edit : adding setbadgecount function.
public static void setbadgecount(context context, layerdrawable icon, int count) { badgedrawable badge; // reuse drawable if possible drawable reuse = icon.finddrawablebylayerid(r.id.ic_badge); if (reuse != null && reuse instanceof badgedrawable) { badge = (badgedrawable) reuse; } else { badge = new badgedrawable(context); } badge.setcount(count); icon.mutate(); icon.setdrawablebylayerid(r.id.ic_badge, badge); }
you can cast drawable
item.geticon()
layerdrawable
if actually layerdrawable
, i.e. if icon
attribute in menu definition references drawable defined layer-list
from the article mentionned : menu definition (menu/menu_home.xml
in article, menu/main.xml
in case)
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_notifications" android:title="notifications" android:icon="@drawable/ic_menu_notifications" android:showasaction="always"/> </menu>
the icon (drawable/ic_menu_notifications
) referenced should layer-list
:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/ic_notification" android:drawable="@drawable/ic_action_email" android:gravity="center" /> <!-- set place holder drawable android:drawable isn't null --> <item android:id="@+id/ic_badge" android:drawable="@drawable/ic_action_email" /> </layer-list>
also 1 of layer should have ic_badge
id. layer used setbadgecount()
Comments
Post a Comment