参考:http://blog.csdn.net/chenyafei617/article/details/6577940
一、是什么
WindowManager是Android中的一个重要的服务。WindowManager Service是全局唯一的。
二、原理
它将用户的操作,翻译为指令,发送给呈现在界面上的各个Window。Activity会将顶级的控件注册到Window Manager中,当用户触摸屏幕或键盘时,Window Manager就会通知到,而当控件有一些请求产生,也会经由ViewParent送回到Window Manager中,从而完成整个通信流程。
整个Android的窗口机制是基于一个叫做WindowManager,这个接口可添加view到屏幕(WindowManager.addView()),也可从屏幕删除view(WindowManager.removeView())。它面向的对象一端是屏幕,另一端是view。通过WindowManager.addView()方法创建的view,会根据WindowManager.LayoutParams的属性不同,产生不同的效果。比如创建系统级窗口,实现悬浮窗口效果。WindowManager用到的方法基本就三个:addView()、removeView()、updateLayout()。而WindowManager.LayoutParams的属性就多了,具体参考API或者开头贴的链接。
三、怎么用
举例说下,创建一个Button,然后通过WindowManager的实例对象的addView()添加这个Button并设置对应的LayoutParams参数。
Button bb=new Button(getApplicationContext());
WindowManager wmManager=(WindowManager) getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();
/**
*以下都是WindowManager.LayoutParams的相关属性具体用途请参考SDK文档
*/
wmParams.type=2002; //这里是关键,你也可以试试2003
wmParams.format=1;
/**
*这里的flags也很关键代码实际是wmParams.flags |= FLAG_NOT_FOCUSABLE;40的由来是wmParams的默认属性(32)+ FLAG_NOT_FOCUSABLE(8)
*/
wmParams.flags=40;
wmParams.width=40;
wmParams.height=40;
wmManager.addView(bb, wmParams); //创建View
四、WindowManager的一些接口
1)abstract Display getDefaultDisplay(); //获取默认显示的Display对象
五、Android系统服务
getSystemService(String name):根据name值来取得对应的object,然后转换成相应的服务对象。以下介绍系统对应的服务:
===============================================================
name 返回的对象 说明
WINDOW_SERVICE WindowManager 管理打开的窗口程序
LAYOUT_INFLATER_SERVICE LayoutInflater 取得xml里定义的view
ACTIVITY_SERVICE ActivityManager 管理应用程序的系统状态
POWER_SERVICE PowerManger 电源的服务
ALARM_SERVICE AlarmManager 闹钟的服务
NOTIFICATION_SERVICE NotificationManager 状态栏的服务
KEYGUARD_SERVICE KeyguardManager 键盘锁的服务
LOCATION_SERVICE LocationManager 位置的服务,如GPS
SEARCH_SERVICE SearchManager 搜索的服务
VIBRATOR_SERVICE Vibrator 手机震动的服务
CONNECTIVITY_SERVICE Connectivity 网络连接的服务
WIFI_SERVICE WifiManager Wi-Fi服务
TELEPHONY_SERVICE TeleponyManager 电话服务
==================================================================================