通知欄Notification的詳細使用

轉載自:http://blog.csdn.net/vipzjyno1/article/details/25248021

在android的應用層中,涉及到很多應用框架,例如:Service框架,Activity管理機制,Broadcast機制,對話框框架,標題欄框架,狀態欄框架,通知機制,ActionBar框架等等。

下面就來說說經常會使用到通知機制中的通知欄框架(Notificaiton),它適用于交互事件的通知。它是位于頂層可以展開的通知列表。它會時不時的提醒你什么軟件該更新了,什么人發你微信消息了等。

(網上看了下,全面介紹的文章不多,所以就萌生了寫這篇的念頭,隨便當作回顧筆記。下面我就通過官方文檔、源代碼、書上的一些資料匯總下這一塊的知識,并通過一個通知欄的匯總DEMO讓大家更好的了解這個類的使用,內容有點多,可以根據需求看目錄學習)。

Notificaiton狀態通知欄:

功能作用

1.顯示接收到短消息、即使消息等信息 (如QQ、微信、新浪、短信)

2.顯示客戶端的推送消息(如有新版本發布,廣告,推薦新聞等)

3.顯示正在進行的事物(例如:后臺運行的程序)(如音樂播放器、版本更新時候的下載進度等)

思維導圖結構

思維導圖的大體結構(按照各個節點延伸拓展學習)

Notificaiton -- service ? --?BroadcastReceiver ?-- Intent(flag、Action等屬性應用) --PendingIntent

感慨:

一個Notificaiton通知的拓展使用就要涉及與4大組建的配合,所以學好整體的知識體系。

聯系:

1.由于service 是在后臺運行,所以它意圖做什么我們看不到,可以通過Notificaiton 來顯示提醒(如音樂的后臺播放)。

2.service服務和BroadcastReceiver廣播相結合,在加上Notificaiton?顯示(如程序的后臺更新)。

3.Intent作為意圖處理,和Notificaiton的點擊時間緊密結合在了一起,并且與BroadcastReceiver和service的聯系也緊密不可以分割。

(service 在后臺之后通過BroadcastReceiver來通知Notificaiton?顯示相關東西,在通過Intent完成用戶的意圖操作)

相關文檔:Activity啟動模式 及 Intent Flags 與 棧 的關聯分析

對應的官方鏈接

設計文檔 :

官方:http://developer.android.com/design/patterns/notifications.html

譯文:http://adchs.github.io/patterns/notifications.html

使用教程 :http://developer.android.com/training/notify-user/index.html

開發文檔 :http://developer.android.com/reference/android/app/Notification.html

大體了解

Notification支持文字內容顯示、震動三色燈鈴聲等多種提示形式,在默認情況下,Notification僅顯示消息標題消息內容送達時間這3項內容。以下就是通知的基本布局。

通知的基本布局

普通視圖:

高度64dp

大試圖的通知在展開前也顯示為普通視圖

元素:

1.標題 ? Title/Name

2.大圖標 ?Icon/Photo

3.內容文字

4.內容信息MESSAGE

5.小圖標 Secondary Icon

6.通知的時間 Timestamp,默認為系統發出通知的時間,也可通過setWhen()來設置

相關分析

狀態通知欄主要涉及到2個類:Notification 和NotificationManager

Notification為通知信息類,它里面對應了通知欄的各個屬性

NotificationManager?: ?是狀態欄通知的管理類,負責發通知、清除通知等操作。

注意:NotificationManager 是一個系統Service,所以必須通過getSystemService(NOTIFICATION_SERVICE)方法來獲取,方法如下。


NotificationManager?mNotificationManager?=?(NotificationManager)?getSystemService(NOTIFICATION_SERVICE);


使用步驟:

流程模塊:

第一步:

創建一個通知欄的Builder構造類 ?(Create a Notification Builder)

第二步:

定義通知欄的Action ?(Define the Notification's Action)

第三步:

設置通知欄點擊事件 ? ?(Set the Notification's Click Behavior)

第四步:

通知 ? (Issue the Notification)

代碼模塊:

實現系統默認的通知欄效果:

第一步:獲取狀態通知欄管理:


NotificationManager?mNotificationManager?=?(NotificationManager)?getSystemService(NOTIFICATION_SERVICE);


第二步:實例化通知欄構造器NotificationCompat.Builder:


NotificationCompat.Builder?mBuilder?=newNotificationCompat.Builder(this);


第三步:對Builder進行配置:


mBuilder.setContentTitle("測試標題")//設置通知欄標題

? ? ? ? .setContentText("測試內容")?//設置通知欄顯示內容

? ? ? ? .setContentIntent(getDefalutIntent(Notification.FLAG_AUTO_CANCEL))//設置通知欄點擊意圖

? ? ? ? //??.setNumber(number)?//設置通知集合的數量

? ? ? ?.setTicker("測試通知來啦")//通知首次出現在通知欄,帶上升動畫效果的

? ? ? ?.setWhen(System.currentTimeMillis())//通知產生的時間,會在通知信息里顯示,一般是系統獲取到的時間

? ? ? ?.setPriority(Notification.PRIORITY_DEFAULT)//設置該通知優先級

? ? ? ?//??.setAutoCancel(true)//設置這個標志當用戶單擊面板就可以讓通知將自動取消

? ? ? .setOngoing(false)//ture,設置他為一個正在進行的通知。他們通常是用來表示一個后臺任務,用戶積極參與(如播放音樂)或以某種方式正在等待,因此占用設備(如一個文件下載,同步操作,主動網絡連接)

? ? ? ?.setDefaults(Notification.DEFAULT_VIBRATE)//向通知添加聲音、閃燈和振動效果的最簡單、最一致的方式是使用當前的用戶默認設置,使用defaults屬性,可以組合

? ? ? ? //Notification.DEFAULT_ALL??Notification.DEFAULT_SOUND?添加聲音?//?requires?VIBRATE?permission

? ? ? ?.setSmallIcon(R.drawable.ic_launcher);//設置通知小ICON


對應的各個方法的屬性(部分方法以上代碼中已經作注釋,就不再介紹):

(1)方法:設置提醒標志符Flags

功能:提醒標志符,向通知添加聲音、閃燈和振動效果等設置達到通知提醒效果,可以組合多個屬性

有2種設置方法:

1.實例化通知欄之后通過給他添加.flags屬性賦值。


Notification?notification?=?mBuilder.build();

notification.flags?=?Notification.FLAG_AUTO_CANCEL;


2.通過setContentIntent(PendingIntentintent)方法中的意圖設置對應的flags


publicPendingIntent?getDefalutIntent(intflags){

? ? ? ? PendingIntent?pendingIntent=?PendingIntent.getActivity(this,1,newIntent(),?flags);

? ? ? ? ?return pendingIntent;

}


提醒標志符成員:

Notification.FLAG_SHOW_LIGHTS ? ? ? ? ? ? ?//三色燈提醒,在使用三色燈提醒時候必須加該標志符

Notification.FLAG_ONGOING_EVENT ? ? ? ? ?//發起正在運行事件(活動中)

Notification.FLAG_INSISTENT//讓聲音、振動無限循環,直到用戶響應(取消或者打開)

Notification.FLAG_ONLY_ALERT_ONCE//發起Notification后,鈴聲和震動均只執行一次

Notification.FLAG_AUTO_CANCEL ? ? ?//用戶單擊通知后自動消失

Notification.FLAG_NO_CLEAR ? ? ? ? ?//只有全部清除時,Notification才會清除,不清楚該通知(QQ的通知無法清除,就是用的這個)

Notification.FLAG_FOREGROUND_SERVICE ? ?//表示正在運行的服務

(2)方法:.setDefaults(int defaults) ? ? (NotificationCompat.Builder中的方法,用于提示)

功能:向通知添加聲音、閃燈和振動效果的最簡單、使用默認(defaults)屬性,可以組合多個屬性(和方法1中提示效果一樣的)

對應屬性:

Notification.DEFAULT_VIBRATE ? ?//添加默認震動提醒 ?需要 VIBRATE permission

Notification.DEFAULT_SOUND ? ?//?添加默認聲音提醒

Notification.DEFAULT_LIGHTS//?添加默認三色燈提醒

Notification.DEFAULT_ALL//?添加默認以上3種全部提醒

(3)方法:setVibrate(long[] pattern)

功能:設置震動方式。

使用:


.setVibrate(newlong[]?{0,300,500,700});


實現效果:延遲0ms,然后振動300ms,在延遲500ms,接著在振動700ms。

以上方法的還有種寫法是


mBuilder.build().vibrate?=newlong[]?{0,300,500,700};


以此類推,2種寫法都可以。

如果希望設置默認振動方式,設置了方法(2)中默認為DEFAULT_VIBRATE 即可。

(4)方法:.setLights(intledARGB,intledOnMS,intledOffMS)

功能:android支持三色燈提醒,這個方法就是設置不同場景下的不同顏色的燈。

描述:其中ledARGB 表示燈光顏色、?ledOnMS 亮持續時間、ledOffMS 暗的時間。

注意:1)只有在設置了標志符Flags為Notification.FLAG_SHOW_LIGHTS的時候,才支持三色燈提醒。

2)這邊的顏色跟設備有關,不是所有的顏色都可以,要看具體設備。

使用:


.setLights(0xff0000ff,300,0)


同理,以下方法也可以設置同樣效果:


Notification?notify?=?mBuilder.build();

notify.flags?=?Notification.FLAG_SHOW_LIGHTS;

notify.ledARGB?=0xff0000ff;

notify.ledOnMS?=300;

notify.ledOffMS?=300;


如果希望使用默認的三色燈提醒,設置了方法(2)中默認為DEFAULT_LIGHTS即可。

(5)方法:.setSound(Urisound)

功能:設置默認或則自定義的鈴聲,來提醒。


//獲取默認鈴聲

.setDefaults(Notification.DEFAULT_SOUND)

//獲取自定義鈴聲

.setSound(Uri.parse("file:///sdcard/xx/xx.mp3"))

//獲取Android多媒體庫內的鈴聲

.setSound(Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI,"5"))


同理相同效果的另一種設置方法這邊就不講, 和上面的都是一樣的。

(6)方法:.setPriority(int pri)

功能:設置優先級

對應優先級描述如下圖:


對應屬性(作用看上圖就可知道):

Notification.PRIORITY_DEFAULT

Notification.PRIORITY_HIGH

Notification.PRIORITY_LOW

Notification.PRIORITY_MAX

Notification.PRIORITY_MIN

(7)方法:setOngoing(boolean ongoing)

功能:設置為ture,表示它為一個正在進行的通知。他們通常是用來表示一個后臺任務,用戶積極參與(如播放音樂)或以某種方式正在等待,因此占用設備(如一個文件下載,同步操作,主動網絡連接)

(8)方法:setProgress(int max, int progress,boolean indeterminate)

屬性:max:進度條最大數值 ?、progress:當前進度、indeterminate:表示進度是否不確定,true為不確定,如下第3幅圖所示 ?,false為確定下第1幅圖所示

功能:設置帶進度條的通知,可以在下載中使用

效果圖如下:

注意:此方法在4.0及以后版本才有用,如果為早期版本:需要自定義通知布局,其中包含ProgressBar視圖

使用:如果為確定的進度條:調用setProgress(max, progress, false)來設置通知,在更新進度的時候在此發起通知更新progress,并且在下載完成后要移除進度條,通過調用setProgress(0, 0, false)既可。

如果為不確定(持續活動)的進度條,這是在處理進度無法準確獲知時顯示活動正在持續,所以調用setProgress(0, 0, true),操作結束時,調用setProgress(0, 0, false)并更新通知以移除指示條

第四步:設置通知欄PendingIntent(點擊動作事件等都包含在這里)

在第三步中,沒有提到一個方法,就是setContentIntent(PendingIntentintent)這個方法,這里拿到這里講。

知識點

1)什么是PendingIntent

PendingIntent和Intent略有不同,它可以設置執行次數,主要用于遠程服務通信、鬧鈴、通知、啟動器、短信中,在一般情況下用的比較少。

2)PendingIntent什么用

Notification支持多種Intent來響應單擊事件、消除事件、處理緊急狀態的全屏事件等。

這里就用到了setContentIntent(PendingIntentintent)來處理以上這么多的事件。

3)相關屬性和方法

屬性:

PendingIntent的位標識符:

FLAG_ONE_SHOT ? 表示返回的PendingIntent僅能執行一次,執行完后自動取消

FLAG_NO_CREATE表示如果描述的PendingIntent不存在,并不創建相應的PendingIntent,而是返回NULL

FLAG_CANCEL_CURRENT表示相應的PendingIntent已經存在,則取消前者,然后創建新的PendingIntent,這個有利于數據保持為最新的,可以用于即時通信的通信場景

FLAG_UPDATE_CURRENT ? ? 表示更新的PendingIntent

方法:

可以看出,它支持多種相應方式,有Activity、Broadcast、Service,就根據你自身需求去選擇。

在各種情況下情況下它還會根據各種情況出發效果:

contentIntent:在通知窗口區域,Notification被單擊時的響應事件由該intent觸發;

deleteIntent:當用戶點擊全部清除按鈕時,響應該清除事件的Intent;

fullScreenIntent:響應緊急狀態的全屏事件(例如來電事件),也就是說通知來的時候,跳過在通知區域點擊通知這一步,直接執行fullScreenIntent代表的事件。

例如:在執行了點擊通知之后要跳轉到指定的XXX的Activity的時候,可以設置以下方法來相應點擊事件:


Intent?intent?=newIntent(context,XXX.class);

PendingIntent?pendingIntent?=?PendingIntent.getActivity(context,0,?intent,0);

mBuilder.setContentIntent(pendingIntent)


例如:在執行了清空全部的通知操作時候,可以設置以下方法來相應這個事件:

采用setDeleteIntent(PendingIntentintent)方法或按照以下寫法


Intent?deleteIntent?=newIntent();

deleteIntent.setClass(context,?XXXReceiver.class);

deleteIntent.setAction(DELETE_ACTION);

notification.deleteIntent?=?PendingIntent.getBroadcast(context,0,?deleteIntent,0);


例如:在響應緊急事件(如來電)時候,可以設置以下方法來相應這個事件:

采用setFullScreenIntent(PendingIntentintent, boolean highPriority)

第五步,最簡單的一部,發送通知請求


mNotificationManager.notify(notifyId,?mBuilder.build());


拓展

實現自定義的通知欄效果:

這里要用到RemoteViews這個類。實現以下2種自定義布局。

注意:

Notification的自定義布局是RemoteViews,和其他RemoteViews一樣,在自定義視圖布局文件中,僅支持FrameLayout、LinearLayout、RelativeLayout三種布局控件和AnalogClock、Chronometer、Button、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView和AdapterViewFlipper這些顯示控件,不支持這些類的子類或Android提供的其他控件。否則會引起ClassNotFoundException異常

步驟如下:

1)創建自定義視圖

2)獲取遠程視圖對象(注:Notification的contentView不能為空)

3)設置PendingIntent(來響應各種事件)

4)發起Notification

大體4步驟這里就不詳細說了,下面就把DEMO中的列子拿出來說下

樣式:

1.自定義帶按鈕通知欄(如下樣式)

正在進行的

“正在進行的”通知使用戶了解正在運行的后臺進程。例如,音樂播放器可以顯示正在播放的音樂。也可以用來顯示需要長時間處理的操作,例如下載或編碼視頻。“正在進行的”通知不能被手動刪除。

實現方法如下:


/**

*?帶按鈕的通知欄

*/

publicvoidshowButtonNotify(){

NotificationCompat.Builder?mBuilder?=newBuilder(this);

RemoteViews?mRemoteViews?=newRemoteViews(getPackageName(),?R.layout.view_custom_button);

mRemoteViews.setImageViewResource(R.id.custom_song_icon,?R.drawable.sing_icon);

//API3.0?以上的時候顯示按鈕,否則消失

mRemoteViews.setTextViewText(R.id.tv_custom_song_singer,"周杰倫");

mRemoteViews.setTextViewText(R.id.tv_custom_song_name,"七里香");

//如果版本號低于(3。0),那么不顯示按鈕

if(BaseTools.getSystemVersion()?<=9){

mRemoteViews.setViewVisibility(R.id.ll_custom_button,?View.GONE);

}else{

mRemoteViews.setViewVisibility(R.id.ll_custom_button,?View.VISIBLE);

}

//

if(isPlay){

mRemoteViews.setImageViewResource(R.id.btn_custom_play,?R.drawable.btn_pause);

}else{

mRemoteViews.setImageViewResource(R.id.btn_custom_play,?R.drawable.btn_play);

}

//點擊的事件處理

Intent?buttonIntent?=newIntent(ACTION_BUTTON);

/*?上一首按鈕?*/

buttonIntent.putExtra(INTENT_BUTTONID_TAG,?BUTTON_PREV_ID);

//這里加了廣播,所及INTENT的必須用getBroadcast方法

PendingIntent?intent_prev?=?PendingIntent.getBroadcast(this,1,?buttonIntent,?PendingIntent.FLAG_UPDATE_CURRENT);

mRemoteViews.setOnClickPendingIntent(R.id.btn_custom_prev,?intent_prev);

/*?播放/暫停??按鈕?*/

buttonIntent.putExtra(INTENT_BUTTONID_TAG,?BUTTON_PALY_ID);

PendingIntent?intent_paly?=?PendingIntent.getBroadcast(this,2,?buttonIntent,?PendingIntent.FLAG_UPDATE_CURRENT);

mRemoteViews.setOnClickPendingIntent(R.id.btn_custom_play,?intent_paly);

/*?下一首?按鈕??*/

buttonIntent.putExtra(INTENT_BUTTONID_TAG,?BUTTON_NEXT_ID);

PendingIntent?intent_next?=?PendingIntent.getBroadcast(this,3,?buttonIntent,?PendingIntent.FLAG_UPDATE_CURRENT);

mRemoteViews.setOnClickPendingIntent(R.id.btn_custom_next,?intent_next);

mBuilder.setContent(mRemoteViews)

.setContentIntent(getDefalutIntent(Notification.FLAG_ONGOING_EVENT))

.setWhen(System.currentTimeMillis())//?通知產生的時間,會在通知信息里顯示

.setTicker("正在播放")

.setPriority(Notification.PRIORITY_DEFAULT)//?設置該通知優先級

.setOngoing(true)

.setSmallIcon(R.drawable.sing_icon);

Notification?notify?=?mBuilder.build();

notify.flags?=?Notification.FLAG_ONGOING_EVENT;

mNotificationManager.notify(notifyId,?notify);

}


注意:帶按鈕的布局相應點擊事件在3.0以下版本沒有用,所以這邊作了系統版本判斷,來顯示消失按鈕。

2.自定義不帶按鈕通知欄

實現方法如下:


//先設定RemoteViews

RemoteViews?view_custom?=newRemoteViews(getPackageName(),?R.layout.view_custom);

//設置對應IMAGEVIEW的ID的資源圖片

view_custom.setImageViewResource(R.id.custom_icon,?R.drawable.icon);

//??????view_custom.setInt(R.id.custom_icon,"setBackgroundResource",R.drawable.icon);

view_custom.setTextViewText(R.id.tv_custom_title,"今日頭條");

view_custom.setTextViewText(R.id.tv_custom_content,"金州勇士官方宣布球隊已經解雇了主帥馬克-杰克遜,隨后宣布了最后的結果。");


之后調用:


mBuilder.setContent(view_custom)


來設定自定義的這個布局。

實現:大視圖風格通知(注:4.1之前的版本不支持大視圖)

只在通知被展開時顯示

何時展開:通知處在頂端,或者用戶通過收拾展開

收件箱風格的通知:

相比普通視圖,只多出:7. 詳情區域

效果圖如下:

詳情區域根據用途可有多種風格:

1.NotificationCompat.BigPictureStyle?大圖片風格:詳情區域包含一個256dp高度的位圖

2.NotificationCompat.BigTextStyle大文字風格:顯示一個大的文字塊

3.NotificationCompat.InboxStyle ?收件箱風格:顯示多行文字

各種風格都具有以下常規視圖不具有的內容選項:

1.大標題:在展開視圖時替代普通視圖的標記

2.總結文字:允許你在詳情區域之下增加一行內容

拿收件箱風格為例,實現代碼如下:


NotificationCompat.BigPictureStyle?inboxStyle?=newNotificationCompat.InboxStyle();

String[]?events?=newString[5];

//?Sets?a?title?for?the?Inbox?style?big?view

inboxStyle.setBigContentTitle("大視圖內容:");

//?Moves?events?into?the?big?view

for(inti=0;?i?<?events.length;?i++)?{

inboxStyle.addLine(events[i]);

}

mBuilder.setContentTitle("測試標題")

.setContentText("測試內容")

//??????????????.setNumber(number)//顯示數量

.setStyle(inboxStyle)//設置風格

.setTicker("測試通知來啦");


開發中碰到的問題

(注:下面所指的低版本是指2.3及2.3以下版本)

1.如何取消掉通知欄上的通知

(1)設置對應的flags,讓用戶點擊既被消除:


notification.flags = FLAG_AUTO_CANCEL;


(2) 通過手動消除某項或則全部通知


mNotificationMgr.cancle(NOTIFICATION_ID);//消除對應ID的通知

mNotificationMgr.cancleAll();//消除創建的所有通知


2.低版本中的部分方法已經被棄用的

(1)Notification.Builder(this).getNotification()

(2)mNotification.setLatestEventInfo(this, "title", "content", null);

這些方法都已經被啟用,雖然還有效果,可是不建議使用。所以開發過程中盡量使用NotificationCompat.Builder(this)的構建方法去創建一個通知類。

3.低版本中會報的錯誤及解決方案:

(1)錯誤代碼:java.lang.IllegalArgumentException: contentIntent required: pkg=com.example.notifications id=100 notification=Notification(vibrate=default,sound=null,defaults=0x2,flags=0x0)

解決方案:如果在高版本不會出錯,而在2.3上面報了這個錯誤,通過開發文檔中的以下知道你可以找打:

For this reason, you should always ensure that UI controls in a notification are also available in anActivityin your app, and you should always start thatActivitywhen users click the notification. To do this, use thesetContentIntent()method.

你就應該知道,缺少了setContentIntent()這個方法,在2.3及更低的版本中,必須給它設置設置contentIntent,如果你點擊沒有意圖,可以在賦值的的Intent中設置為new Intent()既可,切記contentIntent不能為空。

代碼如下:


publicPendingIntent?getDefalutIntent(intflags){

? ? ? ? ?PendingIntent?pendingIntent=?PendingIntent.getActivity(this,1,newIntent(),?flags);

? ? ? ? ?return pendingIntent;

}


(2)錯誤代碼:android.app.RemoteServiceException: Bad notification posted from package com.example.notifications: Couldn't expand RemoteViews for: StatusBarNotification(package=com.example.notifications id=101 tag=null notification=Notification(vibrate=null,sound=null,defaults=0x0,flags=0x2))

解決方法:

在自定義的時候,發現了這個問題,解決:每次更新時都必須把RemoteViews給new出來才行,不能利用已有的notification.contentView直接操作!

4.低版本中,自定義的通知欄中如果帶有按鈕,可能按鈕點擊事件會失靈

解決方法:看其它的應用,好像在低版本都會隱藏掉那些按鈕,就是為了不影響用戶體驗,所以應該就這么解決,判斷版本號在去決定是否現在按鈕。

5.低版本中,自定義布局中的字體顏色看不清

如右圖:

解決方案:

由于2.3及之前版本,背景設是白色的那我們定義字體顏色為系統預設的顏色:


?android:attr/textColorPrimary


在資源的src/values目錄中的style.xml文件中設置它標題和內容的樣式為:

在2.3之后的版本中(即API >=9的版本中),在資源文件下的src/values-v9目錄中的style.xml文件中設置它標題和內容的樣式為:

最后賦給自定義布局中的對應標題和內容對應的style即可。

對應解決網址:

1.http://stackoverflow.com/questions/6250356/how-to-use-default-notification-style

2.http://stackoverflow.com/questions/4867338/custom-notification-layouts-and-text-colors/7320604#7320604

3.http://developer.android.com/guide/topics/ui/notifiers/notifications.html#CustomExpandedView ? (官方文檔)

http://developer.android.com/about/versions/android-2.2-highlights.html

6.低版本中mBuilder.setProgress(100, progress, false);沒用,不顯示進度條

解決方法:此方法在4.0及以后版本才有用,如果為早期版本:需要自定義通知布局,其中包含ProgressBar視圖

7.自定義布局的時候,不同版本方法不一樣。(弄了半天,在2.3版本不顯示,原來是方法不兼容)

2.3及2.3之前:

通過


Notification?notify?=?mBuilder.build();

notify.contentView?=?view_custom;

mNotificationManager.notify(notifyId,?notify)


方法賦予VIEW。

2.3之后:

通過Builder以下方法賦于自定義布局。

mBuilder.setContent(view_custom)

DEMO截圖:

DEMO下載:下載地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容

  • 原文出處: http://www.androidchina.net/6174.html Notification在...
    木木00閱讀 12,357評論 3 32
  • 通知(Notification)這個功能對于我們來說非常的常見。打開手機的時候,各種軟件的推送消息蜂擁而至,然后我...
    憶念成風閱讀 3,337評論 2 10
  • 基本使用 1.獲取 NotificationManager 實例2.實例化 NotificationCompat....
    不需要任何閱讀 866評論 0 7
  • Notification簡介 通知是在常規UI界面之外向用戶展示消息的工具,當系統發出通知時,它會以圖表的形式顯示...
    Cris_Ma閱讀 6,918評論 2 10
  • 楊戩拉過敖寸心的手掌仔細看了一遍,一抬頭就對上敖寸心得意洋洋的表情:“你悟出來了?”楊戩的聲音也透著驚喜,他是知道...
    輕映閱讀 598評論 0 0