Android WindowManger实现桌面悬浮窗功能.docx

Android WindowManger实现桌面悬浮窗功能.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 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)

132****1508 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档