Android 5+ пользовательское уведомление XML-макет с RemoteViews, установите правильный значок для ImageButton

Мое приложение использует настраиваемый макет уведомлений с помощью RemoteViews.

Чтобы отобразить текст, макет использует следующие стили системы:

android:TextAppearance.Material.Notification.Title android:TextAppearance.Material.Notification

Это отлично работает.

Однако стиль TextAppearance нельзя использовать для установки значения android:tint, поэтому мне пришлось жестко кодировать цвет.

К моему лучшему знанию, нет специального стиля системы для установки уведомления ImageButton tint.

Жестко закодированные цвета отлично работают в текущих системах Android 5+, но некоторые пользователи устанавливают пользовательские ПЗУ с настраиваемыми темными темами, и уведомление выглядит неправильно, т.е. черные значки на черном фоне.

Есть ли способ получить значок системного уведомления/цветной картинки и применить его к XML-макету?

Или, может быть, есть еще один способ добиться этого?

Ответы

Ответ 1

Извините, но, согласно моим знаниям, пользовательские ПЗУ имеют отдельные системные проекты, конфигурации и не являются официальными.

Таким образом, поддержка Custom ROM без знания его дизайна невозможна. И андроидные API предназначены для поддержки официальных ROM.

Надеюсь, что это поможет!

Ответ 2

Попробуйте этот пример:

* Def: *

public static Bitmap icon ;

icon = BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.YOUR_IMAGE);


     mBuilder = new NotificationCompat.Builder(this);
        mBuilder.setShowWhen(false);
        mBuilder.setDefaults(Notification.DEFAULT_ALL);
        mBuilder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
        mBuilder.setSmallIcon(R.drawable.image1);
        mBuilder.setContentText("this text not visible");
        mBuilder.setLargeIcon(icon);
        mBuilder.setPriority(Notification.PRIORITY_DEFAULT);
        mBuilder.setContent(contentNotifySmall); // ORI
        //mBuilder.setAutoCancel(false);
        mBuilder.setCustomBigContentView(contentNotify);

Ответ 3

Вы можете использовать notificationlistenerservice для получения активного уведомления. Это возвращает список StatusBarNotifications, а затем просто:

StatusBarNotifcation sBNotification = activeNotifications[0];
Notification notification = sBNotification.getNotification();
int argbColor = notification.color;

Ответ 4

Если вы измените ImageButton на ImageView в своем макете, вы можете обновить его с помощью

    RemoteViews remoteView = getRemoteViews(context); 
     // load base icon from res
    Bitmap baseIcon = BitmapFactory.decodeResource(context.getResources(), R.drawable.base_icon);
     // edit Bitmap baseIcon any way for your choose
    Bitmap editedBitmap = ...
    // update notification view with edited Bitmap
    remoteView.setImageViewBitmap(R.id.button_icon, edited);

P.S. вы можете редактировать Bitmap следующим образом: fooobar.com/questions/185356/... или любым другим способом

Надеюсь, что это поможет

Ответ 5

для фона вы можете попробовать эти атрибуты...

app:backgroundTint="@color/pay"

--------- Или -------------

android:tint="@color/white"