android 自定义通知操作的样式

w6mmgewl  于 2023-06-28  发布在  Android
关注(0)|答案(2)|浏览(145)

一个快速的问题,是否可以在Android中自定义通知操作的样式,这样通知就可以看起来像WhatsApp,Viber,Slack等流行的消息应用程序中的通知。到目前为止,我已经尝试使用自定义布局,但随后的行为是不一样的,例如。当从小布局切换到大布局时,标题不会像前面提到的应用程序那样进行动画处理。
我也试过将跨度设置为动作文本,但它不起作用。使用NotificationCompat.CallsStyle()会得到不同的结果,它在这些应答和拒绝按钮中包含图标,而且你可以只显示一个通知(这对我的情况不起作用)。

xxe27gdn

xxe27gdn1#

好吧,因为事情通常发生在3天的试用和权利后,我已经张贴了一个问题,我设法找到解决方案。我不会在这里添加所有预先需要的步骤的代码(创建notif。频道等),只说重要的部分:
首先,您需要对Manifest文件具有以下权限:

<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT"/>

Then:请注意,如果没有全屏Intent,给定的解决方案将无法工作。

val answerAction = NotificationCompat.Action.Builder(
     IconCompat.createWithResource(this, R.drawable.your_icon_drawable),
     getSpannableText("Answer", R.color.green),
     answerCallPendingIntent
    ).build()

NotificationCompat.Builder(context, "channel_id")
    .setForegroundServiceBehavior(NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE)
    .setSmallIcon(R.drawable.your_icon)
    .setColor(ContextCompat.getColor`enter code here`(context, R.color.your_color))
    .setContentTitle("Your content title")
    .setContentText("Your content text")
    .setFullScreenIntent(fullScreenIntent) // Important!
    .setStyle(NotificationCompat.DecoratedCustomViewStyle())
    .addAction(hangUpAction) // same as answer action but different intent
    .addAction(answerAction)
    .setCategory(NotificationCompat.CATEGORY_CALL)
    .setPriority(NotificationCompat.PRIORITY_HIGH)
    .build()

private fun getSpannedText(
     text: String, 
     @ColorRes color: Int
):Spannable {
    val spannable = SpannableString(text)
    spannable.setSpan(
        ForegroundColorSpan(this.getColor(color)),
        0, text.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
    )
    return spannable
}

请记住,不同操作系统版本的外观不会相同,但这种方式通知将调整为默认系统通知,通知按钮将显示为使用此方法的其他应用程序上的通知按钮,默认动画将按预期工作!快乐编码大家!

ql3eal8s

ql3eal8s2#

唯一的方法是使用***DecoratedCustomViewStyle()构建自定义视图***为闭合视图和展开视图创建两种不同的布局

val notificationLayout = RemoteViews(packageName, R.layout.notification_small)
val notificationLayoutExpanded = RemoteViews(packageName, R.layout.notification_large)

将它们添加到管理器

.setCustomContentView(notificationLayout)
        .setCustomBigContentView(notificationLayoutExpanded)

Docs

相关问题