Android 您如何使用所需的背景色(类似于阿迪达斯跑步应用程序)填充整个通知弹出窗口?
我希望通过自定义视图实现以下效果Android 您如何使用所需的背景色(类似于阿迪达斯跑步应用程序)填充整个通知弹出窗口?,android,Android,我希望通过自定义视图实现以下效果 整个通知背景的填充颜色 有行动按钮 我试过几种方法。它们都不起作用 没有应用样式。应用自定义视图和自定义大视图 结果 这不是我想要的,因为它没有操作按钮 应用NotificationCompat.decorredCustomViewStyle样式。应用自定义视图和自定义大视图 结果 这不是我想要的,因为不是整个背景都是彩色的。 应用MeidaStyle样式。应用自定义视图和自定义大视图 结果 这不是我想要的,因为它没有操作按钮 对于如何实施类似于
没有应用样式。应用自定义视图和自定义大视图 结果 这不是我想要的,因为它没有操作按钮
应用NotificationCompat.decorredCustomViewStyle样式。应用自定义视图和自定义大视图 结果 这不是我想要的,因为不是整个背景都是彩色的。
应用MeidaStyle样式。应用自定义视图和自定义大视图 结果 这不是我想要的,因为它没有操作按钮
对于如何实施类似于阿迪达斯跑步的任何建议,我们将不胜感激 乍一看,阿迪达斯Running与
NotificationCompat.BigTextStyle
风格非常接近,但填充了整个背景色,并且前景字体颜色正确
谢谢。您不需要任何定制样式。相反,您需要在
NotificationCompat.Builder
上使用来为整个通知着色
根据文件:
设置此通知是否应着色。设置后,使用设置的颜色将用作此通知的背景色
这只能用于高优先级的持续任务,如导航、持续呼叫或用户的其他类似高优先级事件
对于大多数样式,仅当通知用于前台服务通知时,才会应用颜色
酷!正如我以前使用
setColorized
的经验一样,它使用的是正常的优先级通知(这似乎不起任何作用)。在前台服务通知中,似乎setColorized
会产生不同的行为。快速检查:是否有可能在整个通知背景上应用渐变绘制?如果不是的话,我想我还是用原色吧。@CheokYanCheng-根据我特别引用的文档,前台服务通知的处理方式应该有所不同,是的。不,您只能使用普通颜色,不能使用渐变色。
private void initRemoteViews(String timerText) {
if (remoteViews == null) {
remoteViews = new RemoteViews(
PomodoroApplication.instance().getPackageName(),
PomodoroOptions.INSTANCE.getWorkColor().widgetTimerResourceId
);
}
if (bigRemoteViews == null) {
bigRemoteViews = new RemoteViews(
PomodoroApplication.instance().getPackageName(),
PomodoroOptions.INSTANCE.getWorkColor().widgetBigTimerResourceId
);
}
remoteViews.setTextViewText(R.id.text_view, timerText);
bigRemoteViews.setTextViewText(R.id.text_view, timerText);
}
private void initPendingIntents() {
final Context context = PomodoroApplication.instance().getApplicationContext();
if (this.mainPendingIntent == null) {
final android.content.Intent mainIntent = new Intent(context, TimerActivity.class);
mainIntent.addFlags(getPreventDoubleLaunchFlagsForLauncher());
this.mainPendingIntent = PendingIntent.getActivity(
context,
0,
mainIntent,
PendingIntent.FLAG_CANCEL_CURRENT
);
}
if (this.pausePendingIntent == null) {
Intent pauseIntent = new Intent(context, PauseBroadcastReceiver.class).setAction(PauseBroadcastReceiver.PAUSE_ACTION_NAME);
this.pausePendingIntent = PendingIntent.getBroadcast(
context,
0,
pauseIntent,
PendingIntent.FLAG_CANCEL_CURRENT
);
}
}
private Notification createNotification(long currentDuration) {
String timerText = Utils.getTimerText(
getMaxDuration(),
currentDuration
);
initPendingIntents();
initRemoteViews(timerText);
final Context context = PomodoroApplication.instance().getApplicationContext();
NotificationCompat.Builder builder = new NotificationCompat.Builder(
context,
Utils.createTimerChannel()
)
.setColor(Color.RED)
.setContentIntent(mainPendingIntent)
.setOngoing(true)
.setAutoCancel(false)
.setSound(null)
.setVibrate(null)
.setSmallIcon(R.drawable.ic_stat_name);
NotificationCompat.Action pauseAction = new NotificationCompat.Action(
0, context.getString(R.string.pause), pausePendingIntent
);
builder.addAction(pauseAction);
builder.setCustomContentView(remoteViews);
builder.setCustomBigContentView(bigRemoteViews);
Notification notification = builder.build();
return notification;
}
builder.setStyle(new NotificationCompat.DecoratedCustomViewStyle());
builder.setCustomContentView(remoteViews);
builder.setCustomBigContentView(bigRemoteViews);
androidx.media.app.NotificationCompat.MediaStyle mediaStyle = new androidx.media.app.NotificationCompat.MediaStyle();
builder.setStyle(mediaStyle);
builder.setCustomContentView(remoteViews);
builder.setCustomBigContentView(bigRemoteViews);