Android悬浮窗口的实现

来源:互联网 发布:数据采集系统搭建 编辑:程序博客网 时间:2024/05/18 00:14

最近在做一个流量统计的,有个悬浮窗会像样点。所以稍微研究了下悬浮窗口的实现:效果图如下:做了个透明背景。。。

这里写图片描述

  1. 悬浮窗口需要在主界面出现,就算APP被关闭了,因此悬浮窗口应该用一个service来控制;
  2. 既然悬浮窗口高于其他应用显示在手机上,那控制悬浮窗口的应该是系统类,其中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)
“`

自此,可以轻松将一个控件悬浮在手机上,该悬浮窗口会高于一切,无论在任何界面它都会出现,无法比较“智能化”,即只有在手机主界面(一级界面)才显示,其他时候不显示,要怎么做?

思路是:由于我是用悬浮来做手机流量的更新,因此只要更新的时候,我判断一下现在手机显示的界面是否为主界面,如果不是,我就隐藏起来,就可以了。

1 0