如何在NotificationCompat中添加无图标的Action按钮?
如何在NotificationCompat.Builder的Action按钮中隐藏图标?
我使用
NotificationCompat.Builder创建通知时添加了一个Action按钮,代码如下:NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, channelId) .setSmallIcon(R.drawable.schedule) .addAction(R.drawable.icon,"action test",pi) .setStyle(new NotificationCompat.BigTextStyle().bigText(body)) .setContentTitle(title) .setContentText(body);现在需求是让这个Action按钮不显示图标,但
addAction方法的图标参数是必填项且不能为空,想问问有没有办法实现隐藏图标的效果?
解决方案
当然可以实现!这里有几个实用的方法,适配不同的场景:
使用透明图标(全版本兼容)
这是最稳妥的方案:创建一个完全透明的drawable资源(比如空的shape文件或者透明png),将它作为addAction的图标参数传入。系统会识别这个图标,但用户视觉上完全看不到它,完美达成隐藏效果。
示例代码:// 假设已创建透明图标资源R.drawable.transparent_icon .addAction(R.drawable.transparent_icon,"action test",pi)代码生成透明Drawable
如果你不想额外创建资源文件,也可以通过代码直接生成一个透明Drawable,注意要设置好边界避免占位异常:Drawable transparentDrawable = new ColorDrawable(Color.TRANSPARENT); transparentDrawable.setBounds(0, 0, 0, 0); // 使用Action.Builder的重载方法传入Drawable NotificationCompat.Action action = new NotificationCompat.Action.Builder(transparentDrawable, "action test", pi).build(); mBuilder.addAction(action);Android 12+专属方案(官方推荐)
从Android 12(API 31)开始,官方给NotificationCompat.Action.Builder新增了setIconVisible(false)方法,直接就能隐藏Action图标,无需额外处理资源:NotificationCompat.Action action = new NotificationCompat.Action.Builder(R.drawable.icon, "action test", pi) .setIconVisible(false) .build(); mBuilder.addAction(action);这个方法简洁高效,但只适用于API 31及以上版本,若需兼容低版本,建议结合透明图标方案做版本判断。
内容的提问来源于stack exchange,提问作者user1209216
相关产品推荐
相关产品推荐

