[英]java.lang.ClassCastException: android.graphics.drawable.BitmapDrawable cannot be cast to android.graphics.drawable.LayerDrawable
[英]How to cast BitmapDrawable to LayerDrawable in android
這是代碼段。
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the main; this adds items to the action bar if it is 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;
}
這是錯誤的
LayerDrawable icon = (LayerDrawable) item.getIcon();
BitmapDrawable無法強制轉換為android.graphics.drawable.LayerDrawable
如何將BitmapDrawable轉換為圖層LayerDrawable?
編輯:添加setBadgeCount函數。
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);
}
您只能投出Drawable
你得到item.getIcon()
到LayerDrawable
如果它實際上是一個LayerDrawable
,即如果icon
菜單定義屬性引用一個定義的繪制layer-list
從你的文章mentionned:菜單定義( menu/menu_home.xml
中的文章, menu/main.xml
你的情況)
<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>
引用的圖標( drawable/ic_menu_notifications
)應該是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 a place holder Drawable so android:drawable isn't null -->
<item
android:id="@+id/ic_badge"
android:drawable="@drawable/ic_action_email" />
</layer-list>
另外一個層應該有ic_badge
作為id。 這是setBadgeCount()
使用的setBadgeCount()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.