Добавление действий к уведомлению в jellybean игнорирует пользовательский макет, установленный с setContent

Я создаю уведомление с пользовательским макетом, используя setContent, и он отлично работает. Но когда я добавляю действия к уведомлению с помощью addAction(), мой пользовательский макет игнорируется, и он показывает макет уведомления по умолчанию для Android.

Когда я сжимаю уведомление (используя жест двумя пальцами), показывается мой пользовательский макет, поэтому кажется, что "расширенная" форма использует другой макет, который я не могу установить.

Снимки экрана (с действиями, а затем, проведя двумя пальцами вверх, чтобы уменьшить его)

Расширено с действиями

После сжатия обратно

Как видите, он отображается пустым (= макет по умолчанию) при отображении действий.

Код:

RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.notification_status);
Builder builder = new Notification.Builder(context);
builder.setSmallIcon(icon)
    .setTicker(tickerText)
    .setWhen(when)
    .setContent(remoteView)
    .setOngoing(true)
    .setContentIntent(contentIntent)
    .setPriority(Notification.PRIORITY_HIGH)
    .addAction(R.drawable.ic_remove, "Action 1", cancelPendingIntent)
    .addAction(R.drawable.ic_stat_notify_gray_official, "Action 2", cancelPendingIntent)
    .setContentIntent(contentIntent);
Notification statusNotification = builder.build();
return statusNotification;

Я попытался найти где-то для управления макетом уведомления с действиями, но безуспешно. Любая помощь?

1 ответ

Была точно такая же проблема! Вместо звонка

builder.setContent(remoteView)

Что заменяет обычный контент, вы должны сделать это так:

Notification statusNotification = builder.build();
statusNotification.bigContentView = remoteViews;

Который установит ваш макет в bigContentView, который становится видимым после расширения!

ПРИМЕЧАНИЕ. Это предотвратит появление кнопок действий. См. В Android (на JB), как добавить действие в настраиваемое расширенное уведомление? как обойти это

Другие вопросы по тегам