如何在Android N中更改通知操作文本颜色?

9

Android N Notification actions

是否可以更改“FIRE”、“AMBULANCE”和“POLICE”的文本颜色?

或者像早期版本的Android那样添加图标?

Pre N Android Notification actions


Notification.Action.Builder类将帮助您解决添加操作按钮图标的问题。https://developer.android.com/reference/android/app/Notification.Action.Builder.html 至于更改文本颜色,我不确定。但是我认为您可以尝试使用Spannable(虽然我不确定)。https://developer.android.com/reference/android/text/Spannable.html - Dhrumil Patel
5个回答

15

要改变操作文本的颜色,请使用:

HtmlCompat.fromHtml("<font color=\"" + ContextCompat.getColor(context, R.color.custom_color) + "\">" + context.getString(R.string.fire) + "</font>", HtmlCompat.FROM_HTML_MODE_LEGACY)

作为操作标题CharSequence,例如:

Notification notification = new NotificationCompat.Builder(context, channelId)
        ...
        .addAction(new NotificationCompat.Action.Builder(
                            R.drawable.ic_fire,
                            HtmlCompat.fromHtml("<font color=\"" + ContextCompat.getColor(context, R.color.custom_color) + "\">" + context.getString(R.string.fire) + "</font>", HtmlCompat.FROM_HTML_MODE_LEGACY),
                            actionPendingIntent))
                    .build())
        .build();

6
有点奇怪,这是做这件事情的方式。在Android 9上,如果我设置字体颜色,它会改变按钮的背景颜色。 - TeKo
很抱歉,这个问题比较奇怪且没有文档记录。根据参数类型 CharSequense,我猜测可以使用可扩展字符串(Spannable String)。 - Sdghasemi
2
在 Android 8 和 Android 10 上尝试过,表现符合预期。 - Roc Boronat

14
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
    builder.setColor(ContextCompat.getColor(context, R.color.colorPrimary));

NotificationCompat.Builder.setColor 方法用于为通知设置强调颜色,该颜色也将应用于操作按钮的文本。


2
它还将更改通知的小图标颜色。 - Gary Chen

2
在 Kotlin 中,您可以添加此函数来更改文本颜色:
private fun getActionText(@StringRes stringRes: Int, @ColorRes colorRes: Int): Spannable? {
            val spannable: Spannable = SpannableString(applicationContext.getText(stringRes))
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
                spannable.setSpan(
                    ForegroundColorSpan(applicationContext.getColor(colorRes)), 0, spannable.length, 0
                )
            }
            return spannable
        }

之后你只需要从builder中调用它即可:

builder.addAction(R.drawable.ic_call_end, getActionText(R.string.reject,R.color.red), rejectPendingIntent)
builder.addAction(R.drawable.ic_accept, getActionText(R.string.accept,R.color.green), acceptPendingIntent)

您可以在通知中添加更多的按钮。

1
要更改操作文本的颜色并在其左侧放置图标,请使用以下示例。
NotificationCompat.Builder(context).setColor(ContextCompat.getColor(context, R.color.yourColorResourceHere))
.addAction(android.R.drawable.ic_menu_close_clear_cancel, "Fire", myPendingIntent);

1
图标没有显示。我猜它们只会出现在旧版的安卓系统中。 - Kwnstantinos Nikoloutsos
Android 10 中 addAction 按钮文本颜色已更改。 - Bolt UIX

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接