有各種各樣的通知,不同情況使用不同的通知方式,使用戶在體驗上更佳,下面就講一下四種常用的通知方式Notification、Dialog、Toast、Snackbar
通知欄(Notification)
public void showNotification() {
//通過Notification.Builder 創建一個notification
NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext());
//第一次收到通知時,在通知欄顯示的內容
builder.setTicker("中獎通知");
//用戶點擊後自動消失
builder.setAutoCancel(true);
//在通知欄顯示的標題
builder.setContentTitle("恭喜你中獎了");
//在通知欄顯示的內容
builder.setContentText("你的號碼被我公司抽中,中獎100萬,請及時聯絡:139999");
//設置小圖標,必須設置,否則通知無法顯示
builder.setSmallIcon(R.mipmap.ic_launcher);
//設置用戶無法去掉通知,只能通過代碼根據id號去掉
//builder.setOngoing(true);
//設置靜止和振動的數組,單位是毫秒,靜止,振動,靜止,振動···
builder.setVibrate(new long[]{0, 500, 500, 500});
//設置提示LED燈,顏色,亮起的時長,熄滅的市場
builder.setLights(Color.BLUE, 200, 200);
//設置通知的聲音,要根據自己的音頻位置
builder.setSound(Uri.fromFile(new File("/system/media/audio/ui/usb_effect.ogg")));
//設置默認的通知鈴聲、振動、LED燈
//builder.setDefaults(NotificationCompat.DEFAULT_ALL);
//設置優先級
builder.setPriority(NotificationCompat.PRIORITY_MAX);
Notification notification = builder.build();
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//第一個參數是用於取消通知的id號
manager.notify(1, notification);
}
需要振動權限
<uses-permission android:name="android.permission.VIBRATE"/>
效果圖

如果你是在Fragment上操作,有一點點的不同,留意註釋上的說明
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_me, container, false);
Button button = (Button) view.findViewById(R.id.tongzhi);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//這裏只用到getActivity()
Notification.Builder builder = new Notification.Builder(getActivity());
builder.setTicker("中獎通知");
//builder.setAutoCancel(true);
builder.setContentTitle("恭喜你中獎了");
builder.setContentText("你的號碼被我公司抽中,中獎100萬,請及時聯絡:139999");
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setOngoing(true);
Notification notification = builder.build();
//這裏只用到getActivity()
NotificationManager manager = (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(1,notification);
}
});
return view;
}
想通過點擊通知欄打開一個Activity,需要加上以下代碼
//通過通知欄啓動Activity
Intent intent = new Intent(getApplicationContext(),Main3Activity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(),1,intent,PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);
//當用戶點擊狀態欄後,進入到Activity後,通知欄消失
builder.setAutoCancel(true);
對話框(Dialog)
public void showDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//設置標題
builder.setTitle("通知");
//設置對話框內容
builder.setMessage("這有個重要的通知要您處理");
//設置圖標
builder.setIcon(android.R.drawable.ic_dialog_alert);
//設置是否可以點擊屏幕其他地方或者返回鍵取消顯示
builder.setCancelable(true);
//添加一個自定義佈局,比如一個佈局裏一個輸入框
View view = View.inflate(this, R.layout.item, null);
builder.setView(view);
//右邊按鈕
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//該按鈕的點擊事件
}
});
//左邊按鈕
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//該按鈕的點擊事件
}
});
//單選列表
/*final String[] singleChoiceItems = new String[]{"Android", "Java", "PHP"};
builder.setSingleChoiceItems(singleChoiceItems, 1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),"您選擇了"+singleChoiceItems[which],Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});*/
//複選列表
/*final String[] multiChoiceItems = new String[]{"Android", "Java", "PHP"};
builder.setMultiChoiceItems(multiChoiceItems, new boolean[]{false, true, true}, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
String ruselt = isChecked ? "已選擇" : "未選擇";
ruselt = multiChoiceItems[which] +ruselt;
Toast.makeText(getApplicationContext(),ruselt,Toast.LENGTH_SHORT).show();
}
});*/
//很多朋友都會忘了show
builder.show();
}
普通的對話框

帶輸入框的效果圖

帶單選框的效果圖

帶複選框的效果圖

吐司(Toast)
private Toast toast;
public void showToast(String content) {
//判斷是否爲空,避免生成多個Toast
if (toast == null) {
toast = Toast.makeText(this, content, Toast.LENGTH_SHORT);
} else {
toast.setText(content);
}
toast.show();
}
效果圖,我一直狂點,也只是顯示一次

Snackbar
添加依賴庫
compile 'com.android.support:design:25.3.1'
代碼如下
public void showSnackbar() {
//第一個參數是隨便找當前佈局的id就行了
Snackbar snackbar = Snackbar.make(findViewById(R.id.activity_main), "這個操作不重要", Snackbar.LENGTH_LONG);
//設置按鈕
snackbar.setAction("好的", new View.OnClickListener() {
@Override
public void onClick(View v) {
//按鈕單擊事件
}
});
//顯示該提示
snackbar.show();
}
效果圖
