日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android初级基础知识复习(十八) —— 自定义通知栏

發布時間:2024/1/8 Android 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android初级基础知识复习(十八) —— 自定义通知栏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通知推送Notification

在手機屏幕的頂端下拉會彈出通知欄,里面存放的是App即時提醒用戶的消息,消息內容由Notification 產生并推送。每條消息通知基本都有圖標、標題、內容、時間等元素,參數通過Notification.Builder構建。 下面來看常用的參數構建方法。

  • setWhen:設置推送時間,格式為“小時:分鐘”。推送時間在通知欄右方顯示。
  • setShowWhen:設置是否顯示推送時間。
  • setUsesChronometer:設置是否顯示計數器。為true時不顯示推送時間,動態顯示從通知被推送到當前的時間間隔,以“分鐘:秒鐘”格式顯示。
  • setSmallIcon:設置狀態欄里面的圖標(小圖標)。
  • setTicker:設置狀態欄里面的提示文本。
  • setLargeIcon:設置通知欄里面的圖標(大圖標)。
  • setContentTitle:設置通知欄里面的標題文本。
  • setContentText:設置通知欄里面的內容文本。
  • setSubText:設置通知欄里面的附加說明文本,位于內容文本下方。若調用該方法,則setProgress的 設置失效。
  • setProgress:設置進度條與當前進度。進度條位于標題文本與內容文本中間。
  • setNumber:設置通知欄右下方的數字,可與setProgress聯合使用,表示當前的進度數值。
  • setContentInfo:設置通知欄右下方的文本。若調用該方法,則setNumber的設置失效。
  • setContentIntent:設置內容的延遲意圖PendingIntent,點擊該通知時觸發該意圖。通常調用 PendingIntent的getActivity方法獲得延遲意圖對象,
  • getActivity表示點擊后跳轉到該頁面。
  • setDeleteIntent:設置刪除的延遲意圖PendingIntent,滑掉該通知時觸發該動作。
  • setAutoCancel:設置該通知是否自動清除。若為true,則點擊該通知后,通知會自動消失;若為 false,則點擊該通知后,通知不會消失。
  • setContent:設置一個定制的通知欄視圖RemoteViews,用于取代Builder的默認視圖模板。
  • build:構建方法。在以上參數都設置完畢后,調用該方法返回Notification對象。
  • 使用以上設置方法要注意4點:
    (1)setSmallIcon方法必須調用,否則不會顯示通知消息。
    (2)setWhen與setUsesChronometer同時只能調用其中一個,即推送時間與計數器無法同時顯示,因為 它們都位于通知欄右邊。
    (3)setSubText與setProgress同時只能調用其中一個,因為附加說明與進度條都位于標題文本下方。
    (4)setNumber與setContentInfo同時只能調用其中一個,因為計數值與提示都位于通知欄右下方。

    使用Notification只能生成通知內容,實際推送動作還需借助系統的通知服務實現。NotificationManager 是系統通知服務的管理類,有以下3個常用方法。
    notify:推送指定消息到通知欄。
    cancel:取消指定消息。調用該方法后,通知欄中的指定消息將消失。
    cancelAll:取消所有消息。

    進度條ProgressBar

    消息通知Notification的setProgress方法是對內置進度條進行操作,不過很多時候進度條會單獨使用,有必要了解一下ProgressBar的具體用法。
    下面來看進度條的常用屬性。

  • style:指定進度條的形狀樣式。?android:attr/progressBarStyleHorizontal表示水平形狀,? android:attr/progressBarStyle表示圓圈形狀。
  • max:指定進度條的最大值。 progress:指定進度條當前進度值。
  • secondaryProgress:指定進度條當前次要進度值。比如播放視頻,progress用來表示當前播放進度, secondaryProgress用來表示當前緩沖進度。
  • progressDrawable:指定進度條的進度圖形。
  • 進度條的常用方法有以下9個。

  • setProgress:設置當前進度。
  • getProgress:獲取當前進度。
  • setSecondaryProgress:設置次要進度。
  • getSecondaryProgress:獲取次要進度。
  • setMax:設置進度條的最大值。
  • getMax:獲取進度條的最大值。
  • incrementProgressBy:設置當前進度的增量。
  • incrementSecondaryProgressBy:設置次要進度的增量。
  • setProgressDrawable:設置進度條的進度圖形。
  • 使用進度條時需要注意以下兩點:
    (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。

  • setViewVisibility:設置指定控件是否可見。
  • setViewPadding:設置指定控件的間距。
  • setTextViewText:設置指定TextView或Button控件的文字內容。
  • setTextViewTextSize:設置指定TextView或Button控件的文字大小。
  • setTextColor:設置指定TextView或Button控件的文字顏色。
  • setTextViewCompoundDrawables:設置指定TextView或Button控件的文字周圍圖標。
  • setImageViewResource:設置ImageView或ImgaeButton控件的資源編號。
  • setImageViewBitmap:設置ImageView或ImgaeButton控件的位圖對象。
  • setChronometer:設置計時器信息。
  • setProgressBar:設置進度條信息,包括最大值與當前進度。
  • setOnClickPendingIntent:設置指定控件的點擊響應動作。
  • 自定義通知的文本顏色設定

    開發者根本無法辨別哪些手機改了通知欄的背景,甚至都無從獲知背景色是什么,也就沒法在代碼里面判斷并處理。幸好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初级基础知识复习(十八) —— 自定义通知栏的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。