android 应用内通知,仿通知栏通知效果,通知Toast,悬浮窗

    开发应用,有时候需要在应用内通知提示,如果涉及内部通知提示过多,就需要考虑展示问题,而且还有需要考虑,内部通知提示,不能影响用户的操作行为,以及切换界面的时候(Activity切换)通知提示还得存在一定时间后消失或者不消失,结合这些问题,自己尝试去搞搞,最后有点效果出来,先将效果图贴出:
android 应用内通知,仿通知栏通知效果,通知Toast,悬浮窗_第1张图片

涉及知识点:

  • WindowManager 的使用
  • BroadcastReceiver注册、销毁
  • 监听home键事件
  • ListView和ArrayAdapter
  • Inflate新增的布局
  • handler.postDelayed

分析

  • 通过Application获取打开程序的窗口getSystemService(Context.WINDOW_SERVICE)
  • 通过inflate实例自定义布局
  • 对Window的flag进行设置,设置FLAG_KEEP_SCREEN_ON(当该window对用户可见时,让设备屏幕处于高亮(bright)状态)和FLAG_NOT_FOCUSABLE(让window不能获得焦点,这样用户快就不能向该window发送按键事件及按钮事件)
  • 对Window的type进行设置类型,对于API 大于18的设置TYPE_TOAST(toast类型的window),小于则设置TYPE_PHONE(电话窗口。它用于电话交互(特别是呼入)。它置于所有应用程序之上,状态栏之下),需要获取权限
  • 其他就是对列表进行开发,使用ListView和adapter

贴上代码:

```
windowManager = (WindowManager)context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
    layoutContent = (LinearLayout) View.inflate(context, R.layout.jnotice, null);
    listView = (ListView) layoutContent.findViewById(R.id.listView);
    int w = WindowManager.LayoutParams.MATCH_PARENT;
    int h = WindowManager.LayoutParams.WRAP_CONTENT;
    int flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
    int type;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        type = WindowManager.LayoutParams.TYPE_TOAST;
    } else {
        type = WindowManager.LayoutParams.TYPE_PHONE;
    }
   layoutParams = new WindowManager.LayoutParams(w, h, type, flags, PixelFormat.TRANSLUCENT);
    layoutParams.gravity = Gravity.TOP;
``` 

项目github地址:https://github.com/WX-JIN/JNotice


欢迎关注我的博客:
http://blog.csdn.net/wx_jin
http://soubw.com

你可能感兴趣的:(Android)