原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历
有各种各样的通知,不同情况使用不同的通知方式,使用户在体验上更佳,下面就讲一下四种常用的通知方式Notification、Dialog、Toast、Snackbar
通知栏(Notification)
代码语言:javascript复制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);
}
需要振动权限
代码语言:javascript复制<uses-permission android:name="android.permission.VIBRATE"/>
效果图
如果你是在Fragment上操作,有一点点的不同,留意注释上的说明
代码语言:javascript复制 @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,需要加上以下代码
代码语言:javascript复制//通过通知栏启动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)
代码语言:javascript复制 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)
代码语言:javascript复制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
添加依赖库
代码语言:javascript复制compile 'com.android.support:design:25.3.1'
代码如下
代码语言:javascript复制 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();
} }
效果图
项目源代码:https://resource.doiduoyi.com/#5suse8o