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

 

转载于:https://www.cnblogs.com/yeyupiaoling/p/7280513.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android常驻通知(Notification)是指在用户状态栏中一直显示的通知图标和文本内容,不会因为用户操作或应用进程被销毁而消失。常驻通知通常用于实时监测、后台服务、音乐播放等需要持续提醒用户的场景。 常驻通知的实现步骤如下: 1. 首先,需要创建一个Notification对象,包括通知图标、标题、内容等信息。 2. 然后,创建一个PendingIntent,用于定义用户点击通知后的操作,比如打开应用的某个Activity或执行某个Service。 3. 创建一个NotificationChannel(通知渠道),用于定义通知的重要程度,包括声音、震动等设置。 4. 将Notification对象与PendingIntent关联,并将其设置为常驻通知的优先级。 5. 最后,调用NotificationManager的notify方法,将通知显示在用户的状态栏上。 需要注意的是,常驻通知存在一些使用限制和最佳实践: 1. 用户可以通过设置中的通知管理来关闭或打开特定应用的常驻通知。 2. 常驻通知不适合用于广告或频繁推送的内容,以免打扰用户。 3. 为了避免误导用户,常驻通知的图标和文本内容应与应用的实际情况相符。 4. 如果需要更新通知的内容或操作,可以使用NotificationManager的notify方法进行更新,并保持通知的id不变。 总之,常驻通知Android提供的一个重要功能,可以实现持续提醒用户和后台监测的需求。但应用开发者需要注意使用场景和用户体验,遵循Android的最佳实践,以确保用户对常驻通知的接受和理解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值