WindowManager详解

WindowManager介绍

WindowManager是Android中一个重要的Service,是全局且唯一的。WindowManager继承自ViewManager。
WindowManager主要用来管理窗口的一些状态、属性、view增加、删除、更新、窗口顺序、消息收集和处理等。Android中真正展示
给用户的是window和view,activity所起的作用主要是处理一些逻辑问题,比如生命周期管理及建立窗口。

Activity,View,Window和WindowManager之间的关系

View:最基本的UI组件,表示屏幕上的一个矩形区域。 

Window: 表示一个窗口,包含一个View tree和窗口的layout 参数。View tree的root View可以通过getDecorView得到。
还可以设置Window的Content View。

Activity包含一个Window,该Window在Activity的attach方法中通过调用PolicyManager.makeNewWindow创建。 

WindowManager:一个interface,继承自ViewManager。 有一个implementation class:android.view.WindowManagerImpl。
其实WindowManager并不是整个系统的窗口管理器,而是所在应用进程的窗口管理器。系统全局的窗口管理器运行在SystemServer进程中,
是一个Service。ViewRoot通过IWindowSession接口与全局窗口管理器进行交互。 将一个View add到WindowManager时,WindowManagerImpl
创建一个ViewRoot来管理该窗口的根View。,并通过ViewRoot.setView方法把该View传给ViewRoot。 
ViewRoot用于管理窗口的根View,并和global window manger进行交互。ViewRoot中有一个nested class: W,W是一个Binder子类,用于接收
global window manager的各种消息, 如按键消息, 触摸消息等。 ViewRoot有一个W类型的成员mWindow,ViewRoot在Constructor中创建一个
W的instance并赋值给mWindow。 ViewRoot是Handler的子类, W会通过Looper把消息传递给ViewRoot。 ViewRoot在setView方法中把mWindow传
给sWindowSession。 

总之,每个窗口对应着一个Window对象,一个根View和一个ViewRoot对象。要想创建一个窗口,可以调用WindowManager的addView方法,作为参数的
view将作为在该窗口上显示的根view。

WindowManager方法介绍

一、如何获得WindowManager实例:
    WindowManager wManager = getApplicationContext().getSystemService(Context. WINDOW_ SERVICE);
二、获得WindowManager.LayoutParams:
    WindowManager.LayoutParams wmParams=new WindowManager.LayoutParams();
三、获得屏幕的宽和高:
    WindowManager manager = (WindowManager) context. getSystemService(Context.WINDOW_SERVICE);
    DisplayMetrics dm = new DisplayMetrics();
    manager.getDefaultDisplay().getMetrics(dm);
    int width = dm.widthPixels;
    int height = dm.heightPixels;
四、设置窗口全屏显示:
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getSupportActionBar().hide();
五、保持屏幕常亮
   activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
六、添加view到屏幕
    wmManager.addView(view,wmParams);
七、从屏幕上删除view
    wmManager.removeView(view);
八、悬浮窗口需添加权限
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

WindowManager的Demo(视频播放悬浮框,程序还有问题 后续解决后再加上)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值