悬浮窗,就像QQ安全卫士的小火箭,总的来说是用了一个Service从后台管理着WindowManager,这个WindowManager管理着小窗口,管理着悬浮窗。(提问,如果把这个管理悬浮窗的服务kill掉,是不是悬浮窗就会干点?回答,是的)因为Service管理着WindowManager,所以Service没有了,悬浮窗必定没有,但是为什么QQ安全卫士为什么不会呢,因为他的Service是个打不死的小强。。。具体实现方法请参考以前写过的一片文章android打不死的小强——永不磨灭的Servicr

下面就介绍一下如何通过WindowManager来实现这个悬浮窗。通过WindowManager的addView()方法,并设置WindowManager.LayoutParams的相关属性,就可以往WindowManager中加入所需要的View,而根据WindowManager.LayoutParams属性不同,也就能实现不同的效果。比如创建系统顶级窗口,实现悬浮窗口效果。如果需要将View从WindowManager中移除,只需要调用removeView()即可。

1,得到WindoeManager对象:

WindowManager wManager = getApplicationContext().getSystemService( Context. WINDOW_ SERVICE);

2,得到WindowManager.LayoutParams对象,为后续设置相关参数做准备:

private WindowManager.LayoutParams wmParams=new WindowManager.LayoutParams();

3,设置相关的窗口布局参数,要实现悬浮窗口效果,主要需要设置的参数有:

wmParams.type = LayoutParams.TYPE_PHONE; // 设置window type

wmParams.format = PixelFormat.RGBA_8888; // 设置图片格式,效果为背景透明

/*

* 下面的flags属性的效果形同“锁定”。 悬浮窗不可触摸,不接受任何事件,同时不影响后面的事件响应。

*/

wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL |

LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_NOT_TOUCHABLE;

wmParams.gravity = Gravity.RIGHT| Gravity. CENTER_VERTICAL; // 调整悬浮窗口至右侧中间

// 以屏幕左上角为原点,设置x、y初始值

wmParams.x = 0;

wmParams.y = 0;

// 设置悬浮窗口长宽数据

wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;

wmParams.height =WindowManager.LayoutParams.WRAP_CONTENT;

4,就可以将需要加到悬浮窗口中的View加入到窗口中了:

if(view.getParent==null)//如果view没有被加入到某个父组件中,则加入WindowManager中

wManager.addView(view,wmParams);

5,view为需要放到悬浮窗口中的视图组件。

如果要将其从WindowManager中移除,则可以执行以下语句:

if(view.getParent()!=null)

wManager.removeView(view);

最后,还有需要注意的是,如果要用悬浮窗口,需要在AndroidManifest.xml中加入如下的权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

最最后,自己写的demo,仿照QQ安全卫士的小火箭, 0分代码下载

自己制作悬浮窗——WindowManager的使用相关推荐

  1. html如何制作悬浮窗,使用js实现悬浮窗效果方法

    很多网站效果,当页面向下滚动到某高度时候,导航栏或者其他会悬浮固定到顶部或某个位置,那么下面鹏仔就给大家简单介绍下 css代码 .show{ position: fixed; top: 0; } #n ...

  2. Android悬浮窗原理解析(Window)[源码]

    悬浮窗,在大多数应用中还是很少见的,目前我们接触到的悬浮窗,差不多都是一些系统级的应用软件,例如:360安全卫士,腾讯手机管家等:在某些服务行业如金融,餐饮等,也会在应用中添加悬浮窗,例如:美团的偷红 ...

  3. android桌面悬浮窗,Android桌面悬浮窗

    经常,我们看到在桌面上可移动的悬浮窗,这种场景还是很多的, 像流量统计,桌面歌词等,安全软件的清理小部件 这种小部件主要是通过 WindowManager ; WindowManager.Layout ...

  4. Android可移动的悬浮窗

    1.悬浮窗权限申请: if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {if (!Settin ...

  5. 悬浮窗java_Java制作一个简易的悬浮窗/PPT悬浮窗

    电脑日常使用过程中,我们常常可以看到许多软件有悬浮窗,方便快捷,甚至有的还可以在PPT里面使用.这是怎么实现的呢?今天我就来分享一下Java制作一个简单悬浮窗的方法,可以在PPT里面使用. 运行效果: ...

  6. Android WindowManager实现悬浮窗效果 (一)——与当前Activity绑定

    最近有学生做毕业设计,想使用悬浮窗这种效果,其实很简单,我们可以通过系统服务WindowManager来实现此功能,本章我们来试验一下在当前Activity之上创建一个悬浮的view. 第一步:认识W ...

  7. android添加悬浮窗,在Android中使用WindowManager实现悬浮窗口

    最近在做一个项目的过程中,客户提出要一个能悬浮于所有应用的界面.下图右侧这个界面就是需要实现的悬浮于所有应用之上的视图. 下面就介绍一下如何通过WindowManager来实现这个效果. 通过Wind ...

  8. 像360悬浮窗那样,用WindowManager做一个炫酷的悬浮迷你音乐盒(上)

    *本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 记得上一篇讲的是用RotateDrawable实现网易云音乐唱片机效果,而今天我要讲的是如何用WindowManager去实现一个 ...

  9. Android全屏悬浮窗画布,使用WindowManager实现Android悬浮窗

    WindowManager介绍 通过Context.getSystemService(Context.WINDOW_SERVICE)可以获得 WindowManager对象. 每一个WindowMan ...

最新文章

  1. android relativelayout 点击事件,Android Relativelayout点击背景行为
  2. [AGC018 B] Sports Festival 解题报告
  3. {'张三丰': 101, '无忌': 102, '赵敏': 102} (Python)
  4. python全栈学习--day12(函数高级应用-带参数的装饰器,多个装饰器装饰一个函数)...
  5. 互联网日报 | 美团门票单日入园人次破500万;蔚来用户累计换电百万次;2020诺贝尔生理学或医学奖揭晓...
  6. OGG ORA-1403 NO DATA FOUND
  7. mysql中生成列与JSON类型的索引
  8. java linux socket编程_linux下socket编程实例?javasocket编程流程?java socket编程实例代码讲解...
  9. 用java写一个博客网站
  10. AtCoder从小白到大神的进阶攻略
  11. 计算机网络中的网卡作用
  12. 执念是惩罚自己,释怀才是与自己和解
  13. FITC标记亲和纯化大鼠抗小鼠IgG(H+L)二抗说明书
  14. [机械键盘]Filco87 奶酪绿 FKBN87MRL/ECW2 开箱
  15. 游戏创业团队的技术选型之Flash AIR
  16. 推荐系统----GCN和NGCF, LightGCN实验结果对比
  17. MADlib——基于SQL的数据挖掘解决方案(23)——分类之SVM
  18. ExcelPatternTool: Excel表格-数据库互导工具
  19. dash dock安装 to_Dash to Dock 安装配置(图文教程)
  20. 单片机实现教学上下课的自动打玲

热门文章

  1. c语言程序如何调成夜间模式,原来Windows 10还有这么多隐藏的功能
  2. 什么是Security-Enhanced Linux
  3. [ACE系列] ACE学习
  4. python爬取微博用户关注_Paython微博根据用户名搜索爬取该用户userId
  5. 抖音点赞最多的标题_抖音标题怎么写吸引人点赞多(5个细节需要注意)
  6. neo4j community与neo4j desktop冲突
  7. Linux使用Gparted扩容磁盘分区
  8. 单例模式-双重校验锁
  9. blastn执行错误_version `GOMP_4.0' not found
  10. 常吸二手烟会得慢性咽炎吗?