如何动态更改通知图标颜色?

时间:2014-10-02 15:55:17

标签: android

我在我的应用程序中使用数百个drawable来动态显示状态栏中带有通知图标的数据。每个都是由白色文本和透明背景组成的PNG。我想在某些情况下将白色更改为另一种颜色,但似乎除了重新创建数百个不同颜色的相同图标之外,必须有更好的方法。是否可以使用代码执行此操作?

我找到了改变Drawable颜色的方法(即:How to change colors of a Drawable in Android?),但无法弄清楚如何将其应用于通知图标。 NotifBuilder.setSmallIcon()要求int,而不是Drawable

3 个答案:

答案 0 :(得分:1)

我认为它可以与LevelListDrawable结合使用LayerDrawable

  

LevelListDrawable :管理多个备用Drawable的资源,每个Drawable分配一个最大数值。使用setLevel(int)设置对象的级别值将加载具有分配给其max属性的下一个更大或相等值的图像。使用LevelListDrawable的一个很好的例子是电池电量指示器图标,其中有不同的图像来指示当前的电池电量。

     

LayerDrawable :一个管理其他Drawable数组的Drawable。这些是按数组顺序绘制的,因此具有最大索引的元素将被绘制在顶部。

试试这个:

  • LevelListDrawable XML,包含与颜色一样多的级别(例如,级别1 =红色,级别2 =蓝色等)
  • 每个级别引用一个包含2个项目的LayerDrawable,背景颜色为1st,PNG图标为最后一个
  • 重复所有图标
  • 构建通知时,将Notification对象上的iconLevel属性设置为与所需颜色对应的值

您仍然拥有许多XML绘图,但对于每个图标/颜色组合,它比单独的PNG更具动态性。

答案 1 :(得分:0)

不应将颜色用于通知图标,预计图标不会有颜色。 [1]

彩色图标可能适用于某些较旧的Android版本,但不适用于较新的平台。 [2]

[1] http://developer.android.com/design/style/iconography.html#notification

[2] https://developer.android.com/preview/notifications.html#guidelines,请参阅"在"下使用不同的图标"节

答案 2 :(得分:-2)

试试这个

  mNotificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    // Sets an ID for the notification, so it can be updated
    int notifyID = 1;
    mNotifyBuilder = new NotificationCompat.Builder(this)
    .setContentTitle("New Message")
    .setContentText("You've received new messages.")
    .setSmallIcon(R.drawable.ic_notify_status)
    numMessages = 0;
    // Start of a loop that processes data and then notifies the user
    ...
    mNotifyBuilder.setContentText(currentText)
    .setNumber(++numMessages);
    // Because the ID remains unchanged, the existing notification is
    // updated.
    mNotificationManager.notify(
    notifyID,
    mNotifyBuilder.build());
    ...

请参阅http://developer.android.com/training/notify-user/managing.html