概述
在Notification之----默認(rèn)樣式中講了android各個(gè)版本中提供的默認(rèn)樣式捣辆,現(xiàn)在來講講如何在android各個(gè)版本中自定義樣式。
API Level < 16(JB)
在這個(gè)范圍的版本里杯拐,只支持高度等于64dp的自定義view冒掌。
不論你的layout寫多大的高度筐赔,最后只能顯示為64dp.
RemoteViews remoteViews = new RemoteViews(mContext.getPackageName(), R.layout.custom_notification);
remoteViews.setImageViewBitmap(
R.id.notification_large_icon,
BitmapFactory.decodeResource(mContext.getResources(), R.mipmap.ic_launcher));
remoteViews.setTextViewText(R.id.notification_content, "Content");
remoteViews.setTextViewText(R.id.notification_title, "title");
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
remoteViews.setTextViewText(R.id.notification_time, format.format(new Date()));
builder.setContent(remoteViews);
API Level >= 16(JB) && API Level < 24(N)
在這個(gè)版本里支持了2種高度的自定義view,一種是默認(rèn)狀態(tài)64dp的高度溺欧,另一種是擴(kuò)展?fàn)顟B(tài)的256dp的高度喊熟。
可以給同一條通知設(shè)置正常下的顯示和擴(kuò)展后的顯示
擴(kuò)展:指的是下拉通知讓其展開的狀態(tài)。不同rom可能展開方式不一樣姐刁。
RemoteViews remoteViews = new RemoteViews(mContext.getPackageName(), R.layout.custom_notification);
remoteViews.setImageViewBitmap(
R.id.notification_large_icon,
BitmapFactory.decodeResource(mContext.getResources(), R.mipmap.ic_launcher));
remoteViews.setTextViewText(R.id.notification_content, "Content");
remoteViews.setTextViewText(R.id.notification_title, "title");
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
remoteViews.setTextViewText(R.id.notification_time, format.format(new Date()));
builder.setContent(remoteViews);
RemoteViews remoteViewBig = new RemoteViews(mContext.getPackageName(), R.layout.custom_notification_big);
notification = builder.build();
notification.bigContentView = remoteViewBig;
使用notification的bigContentView 變量來設(shè)置擴(kuò)展后的顯示內(nèi)容芥牌。
API Level >= 24(N)
在N上,雖然任然可以使用notification的bigContentView 變量來設(shè)置擴(kuò)展后的內(nèi)容聂使,但是該屬性已被標(biāo)記為@Deprecated
壁拉,notification.bigContentView = remoteViewBig. 我們可以使用其他推薦的方式來設(shè)置bigContentView。
v4包柏靶,version24版本中NotificationCompat.Builder新增了一個(gè)方法setCustomBigContentView
RemoteViews remoteViewBig = new RemoteViews(mContext.getPackageName(), R.layout.custom_notification_big);
builder.setCustomBigContentView(remoteViewBig);
這樣就可以設(shè)置bigContentView了弃理。
由Notification之----默認(rèn)樣式可以知道,在版本N上屎蜓,系統(tǒng)默認(rèn)的通知欄樣式和高度(變高)已經(jīng)改變痘昌,具體高度還不是很清楚,但是應(yīng)該比之前的默認(rèn)高度要大(>64dp)炬转。所以寫demo的時(shí)候發(fā)現(xiàn)辆苔,如果設(shè)置了bigcontentview,則只會(huì)顯示bigcontentview扼劈,不知道是不是N上做的新改動(dòng)驻啤,筆者后續(xù)研究后會(huì)給出結(jié)果,如果有讀者知道答案也請(qǐng)告知~
最后
相關(guān)閱讀
Notification之----Android5.0實(shí)現(xiàn)原理(二)
Notification之----Android5.0實(shí)現(xiàn)原理(一)
Notification之---NotificationListenerService5.0實(shí)現(xiàn)原理
Notification之----默認(rèn)樣式
Notification之----任務(wù)棧