我在我的应用程序中使用数百个drawable来动态显示状态栏中带有通知图标的数据。每个都是由白色文本和透明背景组成的PNG。我想在某些情况下将白色更改为另一种颜色,但似乎除了重新创建数百个不同颜色的相同图标之外,必须有更好的方法。是否可以使用代码执行此操作?
我找到了改变Drawable
颜色的方法(即:How to change colors of a Drawable in Android?),但无法弄清楚如何将其应用于通知图标。 NotifBuilder.setSmallIcon()
要求int
,而不是Drawable
。
答案 0 :(得分:1)
我认为它可以与LevelListDrawable结合使用LayerDrawable:
LevelListDrawable :管理多个备用Drawable的资源,每个Drawable分配一个最大数值。使用setLevel(int)设置对象的级别值将加载具有分配给其max属性的下一个更大或相等值的图像。使用LevelListDrawable的一个很好的例子是电池电量指示器图标,其中有不同的图像来指示当前的电池电量。
LayerDrawable :一个管理其他Drawable数组的Drawable。这些是按数组顺序绘制的,因此具有最大索引的元素将被绘制在顶部。
试试这个:
您仍然拥有许多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