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())
现在应该可以做到了。
我正在尝试使用自定义布局在 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())
现在应该可以做到了。