目录

夜雨飘零

记录精彩的程序人生

Android的各种通知Notification、Dialog、Toast、Snackbar

有各种各样的通知,不同情况使用不同的通知方式,使用户在体验上更佳,下面就讲一下四种常用的通知方式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(); }

效果图




项目源代码:http://download.csdn.net/download/qq_33200967/9929353**


标题:Android的各种通知Notification、Dialog、Toast、Snackbar
作者:yeyupiaoling
地址:https://yeyupiaoling.github.io/articles/1584875240912.html