Android通知欄的微技巧

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

對(duì)于通知欄的使用,Android各個(gè)版本其實(shí)都有比較大的調(diào)整,包括即將發(fā)布的Android 7.0版本,通知欄功能上又要有大動(dòng)作。那么新版本的通知欄API無(wú)法兼容老系統(tǒng)這就會(huì)是一個(gè)很頭疼的問(wèn)題。

為此Android在appcompat-v7庫(kù)中提供了一個(gè)NotificationCompat類來(lái)處理新老版本的兼容問(wèn)題,我們?cè)诰帉懲ㄖδ軙r(shí)都使用NotificationCompat這個(gè)類來(lái)實(shí)現(xiàn),appcompat-v7庫(kù)就會(huì)自動(dòng)幫我們做好所有系統(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);

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

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

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

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

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

defaultConfig { ? ?.... ? ?targetSdkVersion23

}

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

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

好像下拉之后的大圖還算正常,不過(guò)大圖的右下角也有一個(gè)白白的圓。

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

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

恩?不帶顏色!那圖標(biāo)還怎么設(shè)計(jì)?但這就不是我們程序員應(yīng)該考慮的問(wèn)題了,而是應(yīng)該交給項(xiàng)目的UI設(shè)計(jì)師來(lái)想辦法,但我們需要將這個(gè)設(shè)計(jì)需求清楚地告訴設(shè)計(jì)師,因?yàn)樗麄兺ǔ2⒉恢繥oogle的各種標(biāo)準(zhǔn)和要求。

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

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

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

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

可以看出,它們的通知欄小圖都是沒(méi)有RGB色的,圖標(biāo)是只有白色一種顏色,然后借助alpha圖層來(lái)繪制出一個(gè)logo的樣式。

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

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

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

這里我們來(lái)仔細(xì)觀察一下這個(gè)下拉后的大圖,其實(shí)前面大家應(yīng)該也已經(jīng)注意到了,只不過(guò)一直沒(méi)提,在大圖標(biāo)的右下角,還有一個(gè)比較小的圓圈,在這個(gè)圓圈中嵌套著我們?cè)O(shè)置的小圖標(biāo)。

這個(gè)功能是系統(tǒng)自動(dòng)附加的一個(gè)功能,并不需要我們進(jìn)行任何的代碼設(shè)置,可以觀察一下,支付寶、網(wǎng)易新聞也都是有這個(gè)功能的。但是如果我們?cè)倏醋屑?xì)一點(diǎn),你會(huì)發(fā)現(xiàn)網(wǎng)易的圖標(biāo)更好看一些,因?yàn)橄到y(tǒng)給右下角的這個(gè)小圓圈默認(rèn)是設(shè)置成灰色的,和我們的整體色調(diào)并不搭配,而網(wǎng)易則將這個(gè)小圓圈改成了紅色,因此總體視覺(jué)效果更好。

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

Notificationnotification=builder

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

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

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

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

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

完。。。。。。。。。。。。。。。。。。。。。

文章原創(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)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容