Android悬浮窗口的实现
2016-05-24 14:15
1121 查看
最近在做一个流量统计的,有个悬浮窗会像样点。所以稍微研究了下悬浮窗口的实现:效果图如下:做了个透明背景。。。
悬浮窗口需要在主界面出现,就算APP被关闭了,因此悬浮窗口应该用一个service来控制;
既然悬浮窗口高于其他应用显示在手机上,那控制悬浮窗口的应该是系统类,其中WindowManger为悬浮窗口主要实现类;
WindowManager:窗口管理器,往窗口上添加和删除一个控件,主要有一下步骤:
(1)首先获取WindowManager对象,
(2)设置悬浮控件的样式,WindowManager对象,对于控件的样式有专门的类进行封装:WindowManager.LayoutParams,
重要的属性和方法:
LayoutParams.x 设置控件默认在屏幕的x轴
LayoutParams.y 设置控件默认在屏幕的y轴
LayoutParams.gravity 设置控件在屏幕的gravity
LayoutParams.format 设置控件在屏幕
LayoutParams.width 设置控件的宽度
……详细请参考API文档
如下:
3、将自定义的view和上面定义的wmParams样式添加到窗口中,作为悬浮窗
mWindowManager.removeViewImmediate (View view)
“`
自此,可以轻松将一个控件悬浮在手机上,该悬浮窗口会高于一切,无论在任何界面它都会出现,无法比较“智能化”,即只有在手机主界面(一级界面)才显示,其他时候不显示,要怎么做?
思路是:由于我是用悬浮来做手机流量的更新,因此只要更新的时候,我判断一下现在手机显示的界面是否为主界面,如果不是,我就隐藏起来,就可以了。
悬浮窗口需要在主界面出现,就算APP被关闭了,因此悬浮窗口应该用一个service来控制;
既然悬浮窗口高于其他应用显示在手机上,那控制悬浮窗口的应该是系统类,其中WindowManger为悬浮窗口主要实现类;
WindowManager:窗口管理器,往窗口上添加和删除一个控件,主要有一下步骤:
(1)首先获取WindowManager对象,
WindowManager mWindowManager= getApplication().getSystemService(getApplication().WINDOW_SERVICE);
(2)设置悬浮控件的样式,WindowManager对象,对于控件的样式有专门的类进行封装:WindowManager.LayoutParams,
重要的属性和方法:
LayoutParams.x 设置控件默认在屏幕的x轴
LayoutParams.y 设置控件默认在屏幕的y轴
LayoutParams.gravity 设置控件在屏幕的gravity
LayoutParams.format 设置控件在屏幕
LayoutParams.width 设置控件的宽度
……详细请参考API文档
如下:
//获取param对象 WindowManager.LayoutParam wmParams=new WindowManager.LayoutParams(); //调整悬浮窗显示的停靠位置为左侧置顶 wmParams.gravity = Gravity.LEFT | Gravity.TOP; // 以屏幕左上角为原点,设置x、y初始值 wmParams.x = 0; wmParams.y = 0; //设置悬浮窗口长宽数据 wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
3、将自定义的view和上面定义的wmParams样式添加到窗口中,作为悬浮窗
LayoutInflater inflater = LayoutInflater.from(getApplication()); //获取浮动窗口视图所在布局 LinearLayout mFloatLayout = (LinearLayout) inflater.inflate(R.layout.flow_window, null); //添加mFloatLayout mWindowManager.addView(mFloatLayout, wmParams); 4、移除该悬浮窗
mWindowManager.removeViewImmediate (View view)
“`
自此,可以轻松将一个控件悬浮在手机上,该悬浮窗口会高于一切,无论在任何界面它都会出现,无法比较“智能化”,即只有在手机主界面(一级界面)才显示,其他时候不显示,要怎么做?
思路是:由于我是用悬浮来做手机流量的更新,因此只要更新的时候,我判断一下现在手机显示的界面是否为主界面,如果不是,我就隐藏起来,就可以了。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories