对Window和WindowManager的理解

编程入门 行业动态 更新时间:2024-10-10 09:23:35

对<a href=https://www.elefans.com/category/jswz/34/1768041.html style=Window和WindowManager的理解"/>

对Window和WindowManager的理解

一、对Window和WindowManager的理解

1、Window表示一个窗口、一个抽象类它的实现是PhoneWindow.android的所有视图包括Activity、Dialog都是同Window来呈现
2、WindowManager是Window的创建者类,它和WindowManagerService通过IPC来进行交互

二、如何向Window添加View

layoutParam=new WindowManager.LayoutParams(Layoutparams.wrap_conten,layoutparam.wrap_content,0,0,PixelFormal.TRANSPARENT)
layoutParam.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL|LayoutParams.FLAG_NOT_FOCUSABLE|LayoutParam.FLAG_SHO_WHEN_LOCKED.
layoutParam.x=100;
layoutParam.y=100;
mWindowManager.addView(new Button(getContext()),layparam)

1、关于LayoutParam 的Flag的相关解释

1)FLAG_NOT_FOCUSABLE 表示该控件不能获取焦点也不能获取输入法事件
2)FLAG_NOT_TOUCH_MODAL 表示控件外的事件不能不自己处理,否则其他Window无法接受点击事件
3) FLAG_SHOW_WHEN_LOCKED 表示可以让Window显示在锁屏上

2、Type 参数的解释

1)Type参数表示Window的类型。分别是应用Window、子Window、系统Window。其中系统Window表示一个Activity。子window不能单独存在必须在父window上、系统Window表示需要特殊权限的Window.
2)每个Window都有一个z-ordered表示该Window的层级。其中应用Window的层级范围:1—99,子window范围1000—1999系统Window是2000—2999.

3、WinowManager包含三个方法

即:添加View(addView())、更新View(updateViewLayout)、删除View(removeView())

三、Window的内部机制

window是一个抽象概念,每个Window实际上是一个View。WindowManger addView()、updateView()、remvoeView()也实际的是操作View()

四、Window的添加流程

Window的添加其实并不真正的存在,它是通过addView()方法实现。WindowManger其实是一个接口它的真正实现是WindowManagerImpl类。在WinodwManagerImpl内部又通过WindowManagerGlobal来处理并实现如下步骤:
1、检查参数是否合法并调整布局参数
2、创建ViewRootImpl并将View添加到列表中。
3、通过VieRootImpl来更新界面并完成Window的添加过程。通过ViewRootImpl的setView方法来添加View并通过RequestLayout来刷新请求。接着会通过WindowSession来最终完成Window的添加。在WindowSesssion内部通过IPC的方式来调用WindowManagerService来实现。

五、Activity的启动过程

当startActivity后最后会走到startActivityForResult()方法

更多推荐

对Window和WindowManager的理解

本文发布于:2024-02-06 22:43:55,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1751584.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Window   WindowManager

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!