Android 带有 DecoratedCustomViewStyle 的通知

Android Notification with DecoratedCustomViewStyle

我正在尝试使用自定义布局在 Android 7 上创建通知,但我想使用 v7 支持库中的 DecoratedCustomView 样式:https://developer.android.com/reference/android/support/v7/app/NotificationCompat.DecoratedCustomViewStyle.html

之所以要使用这种样式,是因为我想使用 android 提供的通知 header,如文档所述:

Instead of providing a notification that is completely custom, a developer can set this style and still obtain system decorations like the notification header with the expand affordance and actions.

所以我尝试使用仅包含带有单个 TextView 的 LinearLayout 的 RemoteViews。

    final NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context)
                .setWhen(new Date().getTimeInMillis())
                .setSmallIcon(R.drawable.ic_notification)
                .setContentTitle("title")
                .setContentText("text")
                .setStyle(new android.support.v7.app.NotificationCompat.DecoratedCustomViewStyle())
                .setContent(remoteViews);

结果是一个只包含我的 RemoteView 的通知,很遗憾 header 没有。我刚找到一个在媒体上使用它的例子:https://medium.com/@britt.barak/notifications-part-3-going-custom-31c31609f314

但是我无法使用 Android 提供的 header。任何帮助将不胜感激:)

这似乎是 android 支持库中的一个问题。我使用 Notification Builder 对其进行了测试,它可以正常工作。

我使用了那个指南: https://medium.com/exploring-android/android-n-introducing-upgraded-notifications-d4dd98a7ca92

我在官方 google 问题跟踪器上针对该问题提交了错误: https://issuetracker.google.com/issues/62475846

更新

虽然这不是 google 方面的实际错误,但我认为实现并不是很理想。 问题是,使用了 v4 支持库的 NotificationCompat,它不适用于 v7 装饰器。

出现这种用法是因为您不能以与 v7 NotificationCompat 相同的方式使用构建器模式。

import android.support.v7.app.NotificationCompat;

final NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context);
notificationBuilder.setWhen(new Date().getTimeInMillis())
            .setSmallIcon(R.drawable.ic_notification)
            .setContentTitle("title")
            .setContentText("text")
            .setStyle(new NotificationCompat.DecoratedCustomViewStyle())
            .setContent(remoteViews);

更新 2

自支持库版本最终发布以来26.0.0 不再需要使用支持库的 v7。 DecoratedCustomViewStyle() 现在也可用于 v4 版本。 所以在你的情况下你应该这样做:

.setStyle(new NotificationCompat.DecoratedCustomViewStyle()) 

而不是

.setStyle(new android.support.v7.app.NotificationCompat.DecoratedCustomViewStyle())

现在应该可以做到了。