- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
Android?WindowManger实现桌面悬浮窗功能
目录效果图使用WindowManager实现分析问题参考如果想实现一个在桌面显示的悬浮窗,用Dialog、PopupWindow、Toast等已经不能实现了,他们基本都是在Activity之上显示的,如果想实现在桌面显示的悬浮窗效果,需要用到WindowManager来实现了。
效果图
使用WindowManager实现
添加一个悬浮窗:
sys_view=newSmallWindowView(mContext);
sys_view.setText(50%);
sys_view.setOnTouchListener(this);
windowManager=(WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
intscreenWidth=0,screenHeight=0;
if(windowManager!=null){
//获取屏幕的宽和高
Pointpoint=newPoint();
windowManager.getDefaultDisplay().getSize(point);
screenWidth=point.x;
screenHeight=point.y;
layoutParams=newWindowManager.LayoutParams();
//layoutParams.width=WindowManager.LayoutParams.WRAP_CONTENT;
//layoutParams.height=WindowManager.LayoutParams.WRAP_CONTENT;
layoutParams.width=200;
layoutParams.height=200;
//设置type
if(Build.VERSION.SDK_INT=Build.VERSION_CODES.O){
//26及以上必须使用TYPE_APPLICATION_OVERLAY@deprecatedTYPE_PHONE
layoutParams.type=WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
}else{
layoutParams.type=WindowManager.LayoutParams.TYPE_PHONE;
//设置flags
layoutParams.flags=WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
|WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
layoutParams.gravity=Gravity.START|Gravity.TOP;
//背景设置成透明
layoutParams.format=PixelFormat.TRANSPARENT;
layoutParams.x=screenWidth;
layoutParams.y=screenHeight/2;
//将View添加到屏幕上
windowManager.addView(sys_view,layoutParams);
}
更新悬浮窗位置:
windowManager.updateViewLayout(sys_view,layoutParams);
关闭悬浮窗:
windowManager.removeView(sys_view);
通过上面的代码就可以实现一个桌面悬浮窗功能了。
注意:在6.0以上,需要在Manifest.xml中声明uses-permissionandroid:name=android.permission.SYSTEM_ALERT_WINDOW/权限并且在开启悬浮窗时动态判断权限,如果没有此权限需要跳到设置页面去设置,看下官方文档的说明:
分析
1、添加悬浮窗:通过Context.getSystemService(Context.WINDOW_SERVICE)获得一个WindowManager(以下简称VM)
文档评论(0)