Android通知欄微技巧一些需要注意的小細節(jié)
為此Android在appcompat-v7庫中提供了一個NotificationCompat類來處理新老版本的兼容問題,我們在編寫通知功能時都使用NotificationCompat這個類來實現(xiàn),appcompat-v7庫就會自動幫我們做好所有系統(tǒng)版本的兼容性處理了。一段基本的觸發(fā)通知代碼如下所示:
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); NotificationCompat.Builder builder = new NotificationCompat.Builder(context); Notification notification = builder .setContentTitle("這是通知標題") .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版本的兼容性了。
注意看一下我們給通知設置的圖標,一個小圖標、一個大圖標,都是使用的R.mipmap.ic_launcher這張圖。其實很多app都使用的這種做法,即直接拿應用程序的icon來作為通知的圖標,好像這樣看上去也挺合理的。
現(xiàn)在我使用Android 6.0系統(tǒng)的Nexus 5手機運行這個程序,并觸發(fā)上面那段通知邏輯,效果如圖下圖所示:

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

效果好像還不錯的樣子。但實際上,我現(xiàn)在是將項目的targetSdkVersion指定成了21以下,即低于5.0系統(tǒng)。如果將targetSdkVersion指定成21或者更高的話,結(jié)果可能就不樂觀了:
defaultConfig { .... targetSdkVersion 23 }
這里我們將targetSdkVersion指定成了23,然后重新運行程序并觸發(fā)圖標邏輯,效果如下圖所示:

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

好像下拉之后的大圖還算正常,不過大圖的右下角也有一個白白的圓。
這到底是為什么呢?實際上,Android從5.0系統(tǒng)開始,對于通知欄圖標的設計進行了修改?,F(xiàn)在Google要求,所有應用程序的通知欄圖標,應該只使用alpha圖層來進行繪制,而不應該包括RGB圖層。
說的好像很玄乎,什么叫作只使用alpha圖層來進行繪制呢?其實通俗點來講,就是讓我們的通知欄圖標不要帶顏色就可以了。
恩?不帶顏色!那圖標還怎么設計?但這就不是我們程序員應該考慮的問題了,而是應該交給項目的UI設計師來想辦法,但我們需要將這個設計需求清楚地告訴設計師,因為他們通常并不知道Google的各種標準和要求。
那么我們來參考一下別的程序都是怎么設計通知欄圖標的,這是支付寶的通知欄圖標:

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

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

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

可以看出,它們的通知欄小圖都是沒有RGB色的,圖標是只有白色一種顏色,然后借助alpha圖層來繪制出一個logo的樣式。
因此,按著這種設計要求,我將項目的通知欄圖標改成了這個樣子:

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

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

這里我們來仔細觀察一下這個下拉后的大圖,其實前面大家應該也已經(jīng)注意到了,只不過一直沒提,在大圖標的右下角,還有一個比較小的圓圈,在這個圓圈中嵌套著我們設置的小圖標。
這個功能是系統(tǒng)自動附加的一個功能,并不需要我們進行任何的代碼設置,可以觀察一下,支付寶、網(wǎng)易新聞也都是有這個功能的。但是如果我們再看仔細一點,你會發(fā)現(xiàn)網(wǎng)易的圖標更好看一些,因為系統(tǒng)給右下角的這個小圓圈默認是設置成灰色的,和我們的整體色調(diào)并不搭配,而網(wǎng)易則將這個小圓圈改成了紅色,因此總體視覺效果更好。
那么怎樣修改這個小圓圈的顏色呢?其實非常簡單,只需要在NotificationCompat.Builder中再多連綴一個setColor()方法就可以了,如下所示:
Notification notification = builder ...... .setColor(Color.parseColor("#EAA935")) .build();
現(xiàn)在重新運行一下程序,通知欄大圖的具體效果如下圖所示:

怎么樣,現(xiàn)在的效果是不是更棒了?但是這里我還要給大家提個醒,上面的功能我使用Nexus手機和三星手機都測試過,結(jié)果都是正常的,但是使用小米手機測試就比較無語了,MIUI系統(tǒng)直接無視我們設置的大圖和小圖,一律使用應用程序的icon來作為通知欄圖標,所以如果你是使用的小米手機,就測試不出來上述的各種效果了。其他手機的兼容性我還沒有試過,不過不管怎么樣,我們的代碼都是要這么寫的,至于那些定制過的系統(tǒng)該如何去解析展示,那是這些第三方廠商的事情,畢竟我們程序員也是控制不了的。
當然,如果你手上只有小米手機的話,也不要絕望,還是可以使用Android模擬器來測試這個功能的。
總結(jié)
以上所述是小編給大家介紹的Android通知欄微技巧一些需要注意的小細節(jié),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
解決Android webview設置cookie和cookie丟失的問題
這篇文章主要介紹了解決Android webview設置cookie和cookie丟失的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03淺談Android客戶端與服務器的數(shù)據(jù)交互總結(jié)
這篇文章主要介紹了淺談Android客戶端與服務器的數(shù)據(jù)交互總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09Android基于ViewPager實現(xiàn)的應用歡迎界面完整實例
這篇文章主要介紹了Android基于ViewPager實現(xiàn)的應用歡迎界面,結(jié)合完整實例形式分析了ViewPager類用于歡迎界面顯示圖片的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2016-08-08Android使用CoordinatorLayout實現(xiàn)底部彈出菜單
這篇文章主要為大家詳細介紹了Android使用CoordinatorLayout實現(xiàn)底部彈出菜單,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-11-11解決Android popupWindow設置背景透明度無效的問題
這篇文章主要介紹了解決Android popupWindow設置背景透明度無效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08Android HttpClient GET或者POST請求基本使用方法
在Android開發(fā)中我們經(jīng)常會用到網(wǎng)絡連接功能與服務器進行數(shù)據(jù)的交互,為此Android的SDK提供了Apache的HttpClient來方便我們使用各種Http服務.這里只介紹如何使用HttpClient發(fā)起GET或者POST請求2012-12-12Android XmlPullParser 方式解析 Xml 文檔
這篇文章主要介紹了Android XmlPullParser 方式解析 Xml 文檔的相關(guān)資料,需要的朋友可以參考下2017-06-06