Android通知欄的微技巧

原創(chuàng)微信公眾號郭霖 WeChat ID: guolin_blog

對于通知欄的使用,Android各個版本其實都有比較大的調(diào)整掌挚,包括即將發(fā)布的Android 7.0版本,通知欄功能上又要有大動作止邮。那么新版本的通知欄API無法兼容老系統(tǒng)這就會是一個很頭疼的問題谨履。

為此Android在appcompat-v7庫中提供了一個NotificationCompat類來處理新老版本的兼容問題欢摄,我們在編寫通知功能時都使用NotificationCompat這個類來實現(xiàn),appcompat-v7庫就會自動幫我們做好所有系統(tǒng)版本的兼容性處理了笋粟。一段基本的觸發(fā)通知代碼如下所示:

NotificationManagermanager=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);

NotificationCompat.Builderbuilder=newNotificationCompat.Builder(context);

Notificationnotification=builder.setContentTitle("這是通知標(biāo)題").setContentText("這是通知內(nèi)容").setWhen(System.currentTimeMillis()).setSmallIcon(R.mipmap.ic_launcher).setLargeIcon(BitmapFactory.decodeResource(

getResources(),R.mipmap.ic_launcher))

.build();manager.notify(1, notification);

可以看到怀挠,這里只是把我們平時使用的Notification.Builder改成了NotificationCompat.Builder而已,其他用法都是一模一樣的害捕,這樣我們的通知就具備各種Android版本的兼容性了绿淋。

注意看一下我們給通知設(shè)置的圖標(biāo),一個小圖標(biāo)尝盼、一個大圖標(biāo)吞滞,都是使用的R.mipmap.ic_launcher這張圖。其實很多app都使用的這種做法,即直接拿應(yīng)用程序的icon來作為通知的圖標(biāo)裁赠,好像這樣看上去也挺合理的殿漠。

現(xiàn)在我使用Android 6.0系統(tǒng)的Nexus 5手機(jī)運(yùn)行這個程序,并觸發(fā)上面那段通知邏輯佩捞,效果如圖下圖所示:

可以看到绞幌,通知欄上彈出了一個通知圖標(biāo)。然后我們將通知欄下拉展開一忱,效果如下圖所示:

效果好像還不錯的樣子莲蜘。但實際上,我現(xiàn)在是將項目的targetSdkVersion指定成了21以下掀潮,即低于5.0系統(tǒng)菇夸。如果將targetSdkVersion指定成21或者更高的話琼富,結(jié)果可能就不樂觀了:

defaultConfig { ? ?.... ? ?targetSdkVersion23

}

這里我們將targetSdkVersion指定成了23仪吧,然后重新運(yùn)行程序并觸發(fā)圖標(biāo)邏輯,效果如下圖所示:

恩鞠眉?這是什么鬼薯鼠,怎么通知圖標(biāo)變成白白的一個圓了。下拉之后的大圖效果如下:

好像下拉之后的大圖還算正常械蹋,不過大圖的右下角也有一個白白的圓出皇。

這到底是為什么呢?實際上哗戈,Android從5.0系統(tǒng)開始郊艘,對于通知欄圖標(biāo)的設(shè)計進(jìn)行了修改。現(xiàn)在Google要求唯咬,所有應(yīng)用程序的通知欄圖標(biāo)纱注,應(yīng)該只使用alpha圖層來進(jìn)行繪制,而不應(yīng)該包括RGB圖層胆胰。

說的好像很玄乎狞贱,什么叫作只使用alpha圖層來進(jìn)行繪制呢?其實通俗點(diǎn)來講蜀涨,就是讓我們的通知欄圖標(biāo)不要帶顏色就可以了瞎嬉。

恩?不帶顏色厚柳!那圖標(biāo)還怎么設(shè)計氧枣?但這就不是我們程序員應(yīng)該考慮的問題了,而是應(yīng)該交給項目的UI設(shè)計師來想辦法别垮,但我們需要將這個設(shè)計需求清楚地告訴設(shè)計師便监,因為他們通常并不知道Google的各種標(biāo)準(zhǔn)和要求。

那么我們來參考一下別的程序都是怎么設(shè)計通知欄圖標(biāo)的宰闰,這是支付寶的通知欄圖標(biāo):

下拉通知之后的效果是這樣的:

然后再看一下網(wǎng)易新聞的通知欄圖標(biāo):

下拉通知之后的效果是這樣的:

可以看出茬贵,它們的通知欄小圖都是沒有RGB色的簿透,圖標(biāo)是只有白色一種顏色,然后借助alpha圖層來繪制出一個logo的樣式解藻。

因此老充,按著這種設(shè)計要求,我將項目的通知欄圖標(biāo)改成了這個樣子:

這張圖只用于替換通知的小圖部分螟左,大圖仍然還是用原來的那樣圖就可以了》茸牵現(xiàn)在重新運(yùn)行一下程序,效果如下圖所示:

這樣看上去效果就好多了吧胶背?然后下拉通知欄之后的效果如下圖所示:

這里我們來仔細(xì)觀察一下這個下拉后的大圖巷嚣,其實前面大家應(yīng)該也已經(jīng)注意到了,只不過一直沒提钳吟,在大圖標(biāo)的右下角廷粒,還有一個比較小的圓圈,在這個圓圈中嵌套著我們設(shè)置的小圖標(biāo)红且。

這個功能是系統(tǒng)自動附加的一個功能坝茎,并不需要我們進(jìn)行任何的代碼設(shè)置,可以觀察一下暇番,支付寶嗤放、網(wǎng)易新聞也都是有這個功能的。但是如果我們再看仔細(xì)一點(diǎn)壁酬,你會發(fā)現(xiàn)網(wǎng)易的圖標(biāo)更好看一些次酌,因為系統(tǒng)給右下角的這個小圓圈默認(rèn)是設(shè)置成灰色的,和我們的整體色調(diào)并不搭配舆乔,而網(wǎng)易則將這個小圓圈改成了紅色岳服,因此總體視覺效果更好。

那么怎樣修改這個小圓圈的顏色呢蜕煌?其實非常簡單派阱,只需要在NotificationCompat.Builder中再多連綴一個setColor()方法就可以了,如下所示:

Notificationnotification=builder

.......setColor(Color.parseColor("#EAA935")) ? ? ? ?.build();

現(xiàn)在重新運(yùn)行一下程序斜纪,通知欄大圖的具體效果如下圖所示:

怎么樣贫母,現(xiàn)在的效果是不是更棒了?不過我不知道為什么微信會把圖片壓縮的這么模糊盒刚,我截的原圖都還是挺清晰的腺劣,因此如果大家想要直觀體驗到最佳的視覺效果,最好的辦法還是自己動手試一試因块。

但是這里我還要給大家提個醒橘原,上面的功能我使用Nexus手機(jī)和三星手機(jī)都測試過,結(jié)果都是正常的,但是使用小米手機(jī)測試就比較無語了趾断,MIUI系統(tǒng)直接無視我們設(shè)置的大圖和小圖拒名,一律使用應(yīng)用程序的icon來作為通知欄圖標(biāo),所以如果你是使用的小米手機(jī)芋酌,就測試不出來上述的各種效果了增显。其他手機(jī)的兼容性我還沒有試過,不過不管怎么樣脐帝,我們的代碼都是要這么寫的同云,至于那些定制過的系統(tǒng)該如何去解析展示,那是這些第三方廠商的事情堵腹,畢竟我們程序員也是控制不了的炸站。

當(dāng)然,如果你手上只有小米手機(jī)的話疚顷,也不要絕望旱易,還是可以使用Android模擬器來測試這個功能的。

完荡含。咒唆。。释液。。装处。误债。。妄迁。寝蹈。。登淘。箫老。。黔州。耍鬓。。流妻。牲蜀。。绅这。

文章原創(chuàng)作者GuoLin 書籍推薦

郭林大神原創(chuàng)android 書籍:《第一行代碼 android》

淘寶鏈接: https://s.click.taobao.com/t?e=m%3D2%26s%3DgKUfuKdAZKocQipKwQzePOeEDrYVVa64K7Vc7tFgwiHjf2vlNIV67p2n%2BQBNMyE6Rku8%2Bpj6eJall3bs%2B3NRhNHnsKI%2BqxhyM0iVZhTFBom4YIorMPnmg8G0g2OJi%2FzmXHfenomYtn5EW9vzeG8LzfPUwktUBEmkxg5p7bh%2BFbQ%3D&pvid=10_106.6.161.154_3367_1490163222155

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涣达,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌度苔,老刑警劉巖匆篓,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異寇窑,居然都是意外死亡奕删,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門疗认,熙熙樓的掌柜王于貴愁眉苦臉地迎上來完残,“玉大人,你說我怎么就攤上這事横漏〗魃瑁” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵缎浇,是天一觀的道長扎拣。 經(jīng)常有香客問我,道長素跺,這世上最難降的妖魔是什么二蓝? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮指厌,結(jié)果婚禮上刊愚,老公的妹妹穿的比我還像新娘。我一直安慰自己踩验,他們只是感情好鸥诽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著箕憾,像睡著了一般牡借。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上袭异,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天钠龙,我揣著相機(jī)與錄音,去河邊找鬼御铃。 笑死碴里,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的畅买。 我是一名探鬼主播并闲,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谷羞!你這毒婦竟也來了帝火?” 一聲冷哼從身側(cè)響起溜徙,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎犀填,沒想到半個月后蠢壹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡九巡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年图贸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冕广。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡疏日,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出撒汉,到底是詐尸還是另有隱情沟优,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布睬辐,位于F島的核電站挠阁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏溯饵。R本人自食惡果不足惜侵俗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丰刊。 院中可真熱鬧隘谣,春花似錦、人聲如沸藻三。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棵帽。三九已至,卻和暖如春渣玲,著一層夾襖步出監(jiān)牢的瞬間逗概,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工忘衍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逾苫,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓枚钓,卻偏偏與公主長得像铅搓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子搀捷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容