我在使用Application-Theme更改Background-Color时遇到问题.

NotificationCompat.Builder nBuilder = new NotificationCompat.Builder(this);

TypedValue typedValue = new TypedValue();

getTheme().resolveAttribute(R.attr.colorPrimary, typedValue, true);

int iPrimaryColor = typedValue.data;

getTheme().resolveAttribute(R.attr.colorPrimaryDark, typedValue, true);

int iPrimaryDarkColor = typedValue.data;

Intent notIntent = new Intent(getApplicationContext(), MainActivity.class);

notIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

PendingIntent notOpenOnClick = PendingIntent.getActivity(getApplicationContext(), 0, notIntent, PendingIntent.FLAG_UPDATE_CURRENT);

RemoteViews smallContentView = new RemoteViews(getPackageName(), R.layout.notification_small);

RemoteViews bigContentView = new RemoteViews(getPackageName(), R.layout.notification_expanded);

nBuilder.setSmallIcon(R.drawable.not_icon)

.setOngoing(true)

.setContentTitle(getCurrentSong().getTitle())

.setContentIntent(notOpenOnClick);

Notification not = nBuilder.build();

smallContentView.setInt(R.id.not_linLayout, "setBackgroundColor", iPrimaryColor);

smallContentView.setInt(R.id.not_imvDivider, "setBackgroundColor", iPrimaryDarkColor);

bigContentView.setInt(R.id.not_linLayout, "setBackgroundColor", iPrimaryColor);

bigContentView.setInt(R.id.not_imvDivider, "setBackgroundColor", iPrimaryDarkColor);

setListeners(smallContentView);

setListeners(bigContentView);

not.contentView = smallContentView;

not.bigContentView = bigContentView;

if (isPlaying()) {

not.contentView.setImageViewResource(R.id.not_btnPlayPause, R.drawable.ic_pause_48dp);

not.bigContentView.setImageViewResource(R.id.not_btnPlayPause, R.drawable.ic_pause_48dp);

}

else {

not.contentView.setImageViewResource(R.id.not_btnPlayPause, R.drawable.ic_play_48dp);

not.bigContentView.setImageViewResource(R.id.not_btnPlayPause, R.drawable.ic_play_48dp);

}

我已经尝试过了,但我的通知背景仍然是白色的.

ID是正确的,View linLayout是LinearLayout.

请记住:整个代码在服务中调用!

谢谢!

解决方法:

通过利用NotificationCompat.MediaStyle,可以更轻松地完成大部分工作.它可以在API 24之前的设备上从setColor()调用中获取背景颜色(并在API 24设备上使用该颜色作为重点).这也意味着您不再需要编写任何自定义RemoteViews代码,因为它仅依赖于您添加到媒体控件通知中的操作:

NotificationCompat.Builder nBuilder = new NotificationCompat.Builder(this);

nBuilder.setSmallIcon(R.drawable.not_icon)

.setContentTitle(getCurrentSong().getTitle())

.setContentIntent(notOpenOnClick);

// This is what sets the background color on

// It is an accent color on N+ devices

nBuilder.setColor(getResources().getColor(R.color.colorPrimary));

// Add actions via nBuilder.addAction()

// Set the style, setShowActionsInCompactView(0) means the first

// action you've added will be shown the non-expanded view

nBuilder.setStyle(new NotificationCompat.MediaStyle()

.setShowActionsInCompactView(0));

标签:android,service,notifications,themes,android-remoteview

来源: https://codeday.me/bug/20191008/1874783.html

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐