android 自定义通知栏显示不出来,Android不使用自定义布局情况下实现自定义通知栏图标的方法...

本文介绍了在不使用自定义布局的情况下,如何在Android中实现自定义通知栏图标。通过设置Notification的contentview和使用RemoteViews,结合反射获取内部资源id,可以改变通知栏的图标。同时提到了通知的创建、详细信息设置以及发送到通知栏的过程。最后,还分享了一个小技巧,即如何处理状态栏小图标和通知详细内容的大图标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文实例讲述了android不使用自定义布局情况下实现自定义通知栏图标的方法。分享给大家供大家参考,具体如下:

自定义通知栏图标?不是很简单么。自定义布局都不在话下!

是的,有xml布局文件当然一切都很简单,如果不给你布局文件用呢?

听我慢慢道来!

首先怎么创建一个通知呢?

1.new 一个

notification n = new notification(android.r.drawable.ic_menu_share, null, system.currenttimemillis());

参数:图标 id,发送到状态栏瞬间的文字,当前时间

2.设置详细信息:标题、内容、intent

pendingintent contentintent = pendingintent.getbroadcast(this, 0, intent, pendingintent.flag_update_current);

n.setlatesteventinfo(this, "早上好!", "今天是个晴朗的天气!", contentintent);

3.发送到通知栏

notificationmanager mnm = (notificationmanager) getsystemservice(context.notification_service);

mnm.notify(1001, n);

这样就完成了一个通知的展示,很简单!

我们来看看 n.setlatesteventinfo 干了些什么呢

public void setlatesteventinfo(context context,

charsequence contenttitle, charsequence contenttext, pendingintent contentintent) {

// todo: rewrite this to use builder

remoteviews contentview = new remoteviews(context.getpackagename(),

r.layout.notification_template_base);

if (this.icon != 0) {

contentview.setimageviewresource(r.id.icon, this.icon);

}

if (priority < priority_low) {

contentview.setint(r.id.icon,

"setbackgroundresource", r.drawable.notification_template_icon_low_bg);

contentview.setint(r.id.status_bar_latest_event_content,

"setbackgroundresource", r.drawable.notification_bg_low);

}

if (contenttitle != null) {

contentview.settextviewtext(r.id.title, contenttitle);

}

if (contenttext != null) {

contentview.settextviewtext(r.id.text, contenttext);

}

if (this.when != 0) {

contentview.setviewvisibility(r.id.time, view.visible);

contentview.setlong(r.id.time, "settime", when);

}

if (this.number != 0) {

numberformat f = numberformat.getintegerinstance();

contentview.settextviewtext(r.id.info, f.format(this.number));

}

this.contentview = contentview;

this.contentintent = contentintent;

}

看这句:

contentview.setimageviewresource(r.id.icon, this.icon);

其实就是设置图标了:

参数1:用来显示图标的 imageview 的 id

参数2:图标 id

但是还有一个这样的方法:

remoteviews.setimageviewbitmap(int viewid, bitmap bitmap)

用 bitmap 来设置图标。

而 notifycation 里面有个参数:notification.contentview,仔细看,setlastesteventinfo 方法里创建的 remoteviews 就是他,所以你知道该怎么做了!

但是这里还有一个问题?r.id.icon 怎么获取,这个东西其实在 com.android.internal.r 这个里面,但是这个类我们访问不到怎么办?

反射呗, java 的反射可谓是万能啊,啥都可以拿到只要他在。

class> clazz = class.forname("com.android.internal.r$id");

field field = clazz.getfield("icon");

field.setaccessible(true);

int id_icon = field.getint(null);

n.setlatesteventinfo(context, title, msg, contentintent);

n.flags |= notification.flag_auto_cancel;

if(n.contentview != null && icon != null){

n.contentview.setimageviewbitmap(id_icon, icon);

}

发出通知,下拉通知栏看看,图标是不是变了^_^

此外这里还有一个小细节,就是你 new notifycation() 是传进去的图标会作为状态栏的小图标,小图标尺寸在 hdpi 下面放 32x32 的就可以

fc92b376fe4df49018340517f658fa8b.png

所以你可以第一次传小图标,然后通过 contentview 设置大图标,这样就ok了

ec960b63cd9493890d3de940dfc53b26.png

希望本文所述对大家android程序设计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值