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

Android系统服务-WindowManager

2013-01-18 17:20 369 查看
WindowManager是Android中一个重要的服务 (Service )。WindowManager Service 是全局的,是唯一的。它将用户的操作,翻译成为指令,发送给呈现在界面上的各个Window。Activity会将顶级的控件注册到 Window Manager 中,

当用户真是触碰屏幕或键盘的时候,Window Manager就会通知到,而当控件有一些请求产生,也会经由ViewParent送回到Window Manager中。从而完成整个通信流程。

整个Android的窗口机制是基于一个叫做 WindowManager,这个接口可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,通过 WindowManager的 addView方法创建View,这样产生出来的View根据

WindowManager.LayoutParams属性不同,效果也就不同了。比如创建 系统顶级窗口,实现悬浮窗口效果!WindowManager的方法很简单,基本用到的就三 addView,removeView,updateViewLayout。接口,而WindowManager.LayoutParams的属性就多 了,非常丰富,具体请查后面介绍

怎么样获取windowManager实例呢,下面我们就通过一个小的例子来说明以下:

[java:showcolumns:firstline[1]] view plaincopy

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150

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

上面就是一个简单的例子,创建了一个Button对象然后通过WindowManager实例对象的addView添加这个ButtonVIew并根据相应的LayoutParams参数进行显示。

WindowManager对象的一些接口说明:
1)abstract Display getDefaultDisplay(); //获取默认显示的 Display 对象。

2)abstract void removeViewImmediate(View view);//是removeView(View) 的一个特殊扩展,在方法返回前能够立即调用该视图层次的View.onDetachedFromWindow() 方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: