Android3.0以上版本支持应用自定义通知栏,使用RemoteViews作为自定义通知栏的展示界面类(该类不继承View)。具体实现在网上有很多,但绝大部分都不全面,开发中遇到了不少问题,记录下来,以备后用。
一、ROM版本问题
按钮点击操作仅支持3.0及以上版本,3.0以下的只能展示界面,里面定义的按钮无法触发;
二、自定义通知栏实现方案
NotificationCompat.Builder mBuilder = new Builder(context);
RemoteViews mRemoteViews = new RemoteViews(context.getPackageName(), param.layoutRes);
mRemoteViews.setTextViewText(R.id.txtView_notify_bar_title,
param.title);
mRemoteViews.setTextColor(R.id.txtView_notify_bar_title,
NotificationController.newInstance(context).getDefNotificationTitleColor());
mRemoteViews.setTextViewText(R.id.txtView_notify_bar_content,
param.content);
mRemoteViews.setTextColor(R.id.txtView_notify_bar_content,
NotificationController.getInstance().getDefNotificationContentColor());
showNotifyButtons(context, param, mRemoteViews);
Intent contentIntent = new Intent(context, NotificationService.class);
contentIntent.setAction(ACTION_CLICK_NOTIFY_BAR_NOTICE);
contentIntent.putExtra(PARAM_ID, param.id);
PendingIntent contentPi = PendingIntent.getService(context, param.id,
contentIntent, PendingIntent.FLAG_CANCEL_CURRENT);
// 清除消息事件
Intent deleteIntent = new Intent(context, NotificationService.class);
deleteIntent.setAction(ACTION_CLEAR_NOTIFY_BAR_NOTICE);
deleteIntent.putExtra(PARAM_ID, param.id);
PendingIntent deletePi = PendingIntent.getService(context, param.id,
deleteIntent, PendingIntent.FLAG_CANCEL_CURRENT);
mBuilder.setSmallIcon(R.drawable.ico_app)
.setContentTitle(param.title)
.setContentText(param.content)
.setTicker(param.content)
.setContentIntent(contentPi)