Setting the target SDK to 20 means that you do not build your app for Android Lollipop. This will make your notification icon display all colors, but is not a long-term solution, since you will want to build for Lollipop (at least eventually).
At http://developer.android.com/design/style/iconography.html you can read about that the white style is how notifications are meant to be displayed in Lollipop (SDK 21). Google also suggests using a custom bg color - https://developer.android.com/about/versions/android-5.0-changes.html
I think a better solution is to actually provide the system with a silhouette icon, if the device is running Android Lollipop.
For instance:
Notification notification = new Notification.Builder(context)
.setAutoCancel(true)
.setContentTitle("My notification")
.setContentText("Look, white in Lollipop, else color!")
.setSmallIcon(getNotificationIcon())
.build();
And, in the getNotificationIcon method:
private int getNotificationIcon() {
boolean useSilhouette = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP);
return useSilhouette ? R.drawable.ic_silhouette : R.drawable.ic_launcher;
}