您的位置:首页 > 移动开发 > Android开发

Android悬浮窗口的实现

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



悬浮窗口需要在主界面出现,就算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)

“`

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

思路是:由于我是用悬浮来做手机流量的更新,因此只要更新的时候,我判断一下现在手机显示的界面是否为主界面,如果不是,我就隐藏起来,就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 流量 界面 悬浮