Android初级基础知识复习(十八) —— 自定义通知栏
通知推送Notification
在手機屏幕的頂端下拉會彈出通知欄,里面存放的是App即時提醒用戶的消息,消息內容由Notification 產生并推送。每條消息通知基本都有圖標、標題、內容、時間等元素,參數通過Notification.Builder構建。 下面來看常用的參數構建方法。
使用以上設置方法要注意4點:
(1)setSmallIcon方法必須調用,否則不會顯示通知消息。
(2)setWhen與setUsesChronometer同時只能調用其中一個,即推送時間與計數器無法同時顯示,因為 它們都位于通知欄右邊。
(3)setSubText與setProgress同時只能調用其中一個,因為附加說明與進度條都位于標題文本下方。
(4)setNumber與setContentInfo同時只能調用其中一個,因為計數值與提示都位于通知欄右下方。
使用Notification只能生成通知內容,實際推送動作還需借助系統的通知服務實現。NotificationManager 是系統通知服務的管理類,有以下3個常用方法。
notify:推送指定消息到通知欄。
cancel:取消指定消息。調用該方法后,通知欄中的指定消息將消失。
cancelAll:取消所有消息。
進度條ProgressBar
消息通知Notification的setProgress方法是對內置進度條進行操作,不過很多時候進度條會單獨使用,有必要了解一下ProgressBar的具體用法。
下面來看進度條的常用屬性。
進度條的常用方法有以下9個。
使用進度條時需要注意以下兩點:
(1)max、progress的相關屬性和方法只在樣式為progressBarStyleHorizontal時才有效,即水平進度條可 動態設置進度值;如果樣式為progressBarStyle圓圈形狀,最大值與進度值的設置就會失效,即圓圈形狀不 會顯示當前進度,只會兀自旋轉。想實現動態顯示進度的進度條,可參考6.2節的圓弧進度動畫。
(2)progressDrawable進度圖形不能用普通圖形,只能用層次圖形LayerDrawable。層次圖形可在XML 文件中定義,如果用于描述進度圖形就要同時定義兩個層次,即背景層次與進度條層次。例如,在自定義 圓弧動畫時運用了背景視圖與前景視圖,在進度條中就存在背景層次,只不過前景視圖換成了進度條層 次。
??下面是一個層次圖形定義的XML例子。其中,根節點layer-list表示這是一個層次列表,即層次圖形定 義;背景層次的id為@android:id/background,采用的是形狀圖形(節點名稱為shape);進度條層次的id為 @android:id/progress,采用的是裁剪圖形ClipDrawable(節點名稱為clip):
遠程視圖RemoteViews
前面介紹Notification的常用方法時提到setContent方法可以在設置定制的通知欄視圖RemoteViews時取代Builder的默認視圖模板。
雖然RemoteViews與Activity一樣有自己的布局文件,但是RemoteViews的使用 權限小了很多。兩者的區別主要有:
(1)RemoteViews主要用于通知欄部件和桌面部件,而Activity用于頁面。
(2)RemoteViews只支持少數幾種控件,如TextView、ImageView、Button、ImageButton、 ProgressBar、Chronometer(計時器)和AnalogClock(模擬時鐘)。
(3)RemoteViews不可直接獲取和設置控件信息,只能通過該對象的set方法修改控件信息。
下面來看遠程視圖的常用方法。
構造函數:創建一個RemoteViews對象。第一個參數是包名,第二個參數是布局文件id。
自定義通知的文本顏色設定
開發者根本無法辨別哪些手機改了通知欄的背景,甚至都無從獲知背景色是什么,也就沒法在代碼里面判斷并處理。幸好Android在系統的資源文件中配置了統一風格,像通知欄標題顏色,其實 是從系統資源文件獲取對應的色值。對Android4.*系統來說,通知欄的標題色取自系統的“? android:attr/textColorPrimary”;對于Android5.0及以上的系統,通知標題的文字風格android:textAppearance取自系統的“@android:style/TextAppearance.Material.Notification.Title”。這樣一來,在自定義通知的時候,開發者可以將標題文字顏色設置為系統默認的標題色。于是系統通知擁有什么文本顏色(可能是黑底白字也可 能是白底黑字),開發者自定義的通知也是什么文本顏色,從而一勞永逸解決了通知欄的標題顏色與背景 顏色的適配問題。
具體到App開發的適配工作上面,則需進行以下操作步驟:
(1)首先打開res\values目錄下面的styles.xml,在resources節點內部添加如下所示的風格配置,表示定義一個采取系統默認標題色的字體風格:
(2)其次在res目錄下新建一個文件夾values-v21,再在該文件夾下新建一個styles.xml,并往該XML文件填入下列的風格配置代碼:
新文件夾values-v21用于適配版本代碼不低于21的Android系統,即Android5.0及更高版本的系統。倘若 當前手機運行的是Android4.*,則App運行的時候,系統會自動到values目錄下尋找相應的資源配置;倘若當前手機運行的是Android5.0或者更高版本,則系統會優先在values-v21目錄下查找資源,有找到就用這里的資源,沒找到再用values目錄下的資源。
(3)最后回到自定義通知對應的布局文件,找到標題文本控件,去掉對文字顏色android:textColor的屬 性設置,再添加一行對控件風格style的屬性設置。
修改完畢,這下不管系統通知欄默認的是黑底白字,還是默認白底黑字,自定義消息的標題文本都能 自動變色啦。
總結
以上是生活随笔為你收集整理的Android初级基础知识复习(十八) —— 自定义通知栏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机二级考试干货内容,计算机二级考试经
- 下一篇: Android开发app实现发送短信功能