首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在android中将BitmapDrawable转换为LayerDrawable

如何在android中将BitmapDrawable转换为LayerDrawable
EN

Stack Overflow用户
提问于 2016-05-09 08:17:14
回答 1查看 983关注 0票数 3

这是代码片段。

代码语言:javascript
复制
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;
}

这是直线上的错误

代码语言:javascript
复制
LayerDrawable icon = (LayerDrawable) item.getIcon();

不能将BitmapDrawable转换为android.graphics.drawable.LayerDrawable

如何将BitmapDrawable转换为层LayerDrawable?

编辑:添加setBadgeCount函数。

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-09 10:57:39

只有当Drawable实际上是LayerDrawable时,才能将从item.getIcon()获得的icon转换为LayerDrawable,也就是说,如果菜单定义中的icon属性引用了由layer-list定义的可绘制的

从您提到的文章中:菜单定义(本文中的menu/menu_home.xml,您的例子中的menu/main.xml )

代码语言:javascript
复制
<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

代码语言:javascript
复制
<?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()使用的层

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37110778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档