悬浮窗口相信开发android的猩猩们都遇到过或者实现过,简单的说明原理就是获取WindowManager对象,通过该对象的addView和removeView来向一个页面添加一个悬浮框和删除该悬浮框,其实用WindowManger这个可以实现好多小功能: 1)比如在TV端开发的过程中如果某一页面有分页显示数据的话,当用户按遥控器数字键翻页的时候在页面中动态添加一个View来显示用户输入的数字。 2)可以在MediaPlayer全屏播放的时候在某个时机动态添加一个View来展示相关内容。 3)一些手机管理软件也用悬浮框实现来部署一些快捷功能 实现上述功能有两种思路或者方法来实现: 1) 通过(WindowManager)getSystemService(Context.WINDOW_SERVICE);来获取WindowManger对象,调用addView来添加悬浮框,在用addView添加View的时候需要设置该LayoutParams来控制View的大小或者显示位置。 2)在获取WindowManger的同时,在通过反射机制调用makeNewWindow来生成一个Window里面。我们知道Activity都封装了一个Window对象(PhoneWindow),在Activity里面调用setContentView的时候实际上是调用Window对象的setContentView方法。那么我们完全也可以用此种方法来实现: 通过反射机制来获取Window对象的方法如下:
try {
@SuppressWarnings("rawtypes")
Class policyManagerClass = Class.forName("com.android.internal.policy.PolicyManager");
@SuppressWarnings(