是在你的應(yīng)用常規(guī)界面之外展示的消息,當(dāng)app讓系統(tǒng)發(fā)送一個(gè)消息的時(shí)候,消息
首先以圖表的形式顯示在通知欄,要查看消息的詳情需要進(jìn)入通知抽屜(notificationdrawer中查看)
通知欄和通知抽屜都是系統(tǒng)層面的,你可以隨時(shí)查看,不限制于appNotification的設(shè)計(jì)
作為android UI 中很重要的組成部分,notification擁有屬于自己專屬的設(shè)計(jì)規(guī)則Notification的界面元素
在通知抽屜中的notification有兩種顯示方式,取決于你的android版本以及notification drawer的狀態(tài)
(1)普通視圖
這種風(fēng)格是notification drawer的標(biāo)準(zhǔn)顯示方式
(2)寬視圖
指你的notification被展開的時(shí)候會(huì)顯示更大的視圖,這種風(fēng)格是android4.1版本之后才有的新特性
2、創(chuàng)建一個(gè)Notification
首先將notification的一些UI信息以及相關(guān)動(dòng)作NotificationCompat.Builder對(duì)象,然后通過NotificationCompat.Builder.build()來(lái)獲得notification對(duì)象自己,然后調(diào)用NotificationManager.notify()向系統(tǒng)轉(zhuǎn)交這個(gè)通知一個(gè)notification對(duì)象需要包含以下內(nèi)容:
小圖標(biāo)(setSmallIcon()獲取)
標(biāo)題(setContentTitle()獲取)
詳情文字(setContentText()獲取)
除此之外,其余內(nèi)容都是可選的可以去官網(wǎng)看下NotificationCompat.Builder的相關(guān)文檔
Notification的動(dòng)作與行為雖然這也是可選的,但是你還是應(yīng)該為你的notification至少添加一種行為:允許用戶通過點(diǎn)擊notif進(jìn)入一個(gè)activity中,進(jìn)行更多的查看或者后續(xù)操作,一個(gè)notification可以提供多種動(dòng)作,而且你也應(yīng)該讓用戶點(diǎn)擊一個(gè)notification之后能總是有相應(yīng)的響應(yīng)動(dòng)作,通常是打開一個(gè)activity,你還可以在notification中添加能響應(yīng)點(diǎn)擊事件的button,比如延遲一下鬧鐘,或者立即回復(fù)一條短消息
- 在notification內(nèi)部,一個(gè)動(dòng)作本身是被定義在一個(gè)PendingIntent中,PendingIntent包含一個(gè)用于啟動(dòng)你app中的activity的intent,要講PendingIntent和一個(gè)手勢(shì)聯(lián)系起來(lái),
你需要調(diào)用合適的NotificationCompat.Builder方法,比如你想在點(diǎn)擊notification文字的時(shí)候啟動(dòng)activity,你需要調(diào)用NotificationCompat.Builder的setContentIntent()來(lái)添加PendingIntent。啟動(dòng)一個(gè)activity是notification動(dòng)作相應(yīng)中最普遍的一類寬視圖
3、管理Notification
* **刪除通知:**
- 通知會(huì)一直存在,知道下面的情況之一發(fā)生用戶手動(dòng)一條一條的清楚通知,或者使用"清楚所有"(如果通知允許被清除)用戶點(diǎn)擊通知,當(dāng)你創(chuàng)建這個(gè)通知的時(shí)候使用了setAutoCancel();你為一個(gè)指定ID的通知調(diào)用了cancel(),這個(gè)方法也去刪除正在執(zhí)行的通知你調(diào)用了cancelAll()方法,這將刪除所有你之前發(fā)布的通知
4、顯示進(jìn)度通知欄
- 通知可以包含一個(gè)動(dòng)態(tài)的進(jìn)圖指示器,用來(lái)顯示當(dāng)前操作的進(jìn)度,如果你能估計(jì)這個(gè)操作總共有多久,已經(jīng)任何時(shí)間點(diǎn)上完成進(jìn)度,那么你可以用一個(gè)"確定"格式的指示器(進(jìn)度條),如果說(shuō)你沒法估計(jì)操作的長(zhǎng)度,用"不確定"格式的指示器進(jìn)度條指示器是實(shí)現(xiàn)了ProgressBar來(lái)執(zhí)行顯示的調(diào)用setProgress()方法來(lái)使用進(jìn)度條指示器開始于Android4.0,在之前的版本,你必須創(chuàng)建自己的通知布局來(lái)包含ProgressBar視圖
5、自定義通知視圖
通知的框架允許自定義通知的布局,通過RemoteViews對(duì)象來(lái)定義通知的外觀,自定義通知布局與常規(guī)通知相似當(dāng)時(shí)他是基于定義在xml文件的RemoteViews對(duì)象來(lái)操作的
自定義通知的可用高度是取決與通知視圖的,正常的視圖高度限制在64dp,可展開視圖的而不懼高度限制在256dp
為了去定義自己的通知布局,從擴(kuò)充xml文件獲取一個(gè)RemoteViews對(duì)象的實(shí)例開始,然后,類似于調(diào)用setContentTitls()方法 一樣,我們需要滴啊用setContent(),為了能設(shè)置更多細(xì)節(jié),我們使用RemoteViews對(duì)象的方法來(lái)設(shè)置更多的內(nèi)容
1、創(chuàng)建一個(gè)單獨(dú)的xml文件,用來(lái)定義通知的布局,
2、在應(yīng)用里面,使用RemoteViews對(duì)象的方法來(lái)給你的通知設(shè)置文本和圖標(biāo),通過調(diào)用setContent()把你的RemoteViewsdyuxuabg 放到NotificationCompat.Builder里面,避免使用背景視圖,引文你的文本可能變得不易閱讀RemoteViews對(duì)象也包含一些方法用來(lái)給你去添加Chronometer和ProgressBar。想要了解更多的自定義布局通知,參考文檔
3、注意:當(dāng)你使用自定義的通知條的時(shí)候,特別要注意你自定義的通知條在不同方向與分辨率的設(shè)備上是如何工作的,當(dāng)然這條建議對(duì)所有的視圖布局,都很重要,但對(duì)通知條來(lái)說(shuō)尤其重要的,因?yàn)橥ㄖ閷系目丶钟邢?,不要把自己的通知條做的太過復(fù)雜,確保他的靈活性
4、為自定義的通知條文本使用樣式資源
自定義通知條的時(shí)候總是使用樣式資源去定義文本,通知的背景顏色會(huì)變得與設(shè)備當(dāng)前版本的android有很大的反差,使用樣式文件能幫你很好的解決這一點(diǎn),從2.3開始,系統(tǒng)就為標(biāo)準(zhǔn)的通知布局定義了文本的樣式,如果你在2.3以及以上更高的版本上使用同樣的樣式,你必須確保你的文本相對(duì)于背景是可以看見的