android艺术开发探索之window和windowmanager
2016-08-16 15:12
316 查看
window和windowmanager
window大多数场景都是使用在我个人觉得就是popwindow,Dialog用到的比较多,大多数应用场景都是显示一个对话框或者一个悬浮的窗体,这个时候用的比较多,主要是设置这个窗体的位置,大小和不透度,其他的地方没怎么用到呢^_^Button m=new Button(this); m.setText("122"); WindowManager.LayoutParams LP=new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT,0,0, PixelFormat.TRANSPARENT); LP.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; LP.gravity= Gravity.LEFT|Gravity.TOP; LP.x=100; LP.y=300; getWindowManager().addView(m,LP);
window是view的直接管理者,并且所有视图都是通过window来呈现的,windowManagerService是window的具体实现,他们之间是一个IPC通信的过程。windows是一个抽象类,windowmanager是外界访问window的入口,window有三种类型,应用window(对应Activity等,层级范围1-99),子window(对应Dialog等,层级范围1000-1999),系统window(需加权限才可创建<>,对应Toast、状态栏等,
层级范围2000-2999),window会分层,层级大的会覆盖在层级小的window上,对应着WindowManager.LayoutParams的type参数。
WindowManager它可以创建一个Windows,并向其添加View,更新window中的view,删除window只需删除window里面的view即可,每一个window对应一个view和ViewRootImpl,ViewRootImpl是window和view的沟通桥梁,window实际并不存在是以view的形式存在的。windowManager的添加删除是使用WindowManagerGlobal桥接模式操作的,它里面有添加更新移除的方法。
window的添加:
方法首先它会检查你传入的参数是否合法,然后new一个ViewRootImpl,view设置layout参数并把ViewRootImpl对象view对象,params对象全都装在各自的数组里,然后由ViewRootImpl的setviews来完成添加接着通过Windowsession完成window的添加过程,在Session内部交给了windowManagerService处理,Window的添加过程是一个IPC调用。
window的删除:
方法首先通过findviewLocked来查找待删除的View的索引,遍历数组,然后通过removeViewLocked来进一步删除,removeViewLocked是通过ViewRootImpl完成删除操作,WindowManager提供2中删除接口removeView和removeViewImmediate分别代表同步删除和异步删除。Dialog的Window创建过程。
Dialog中window的创建同样是通过PolicyManager的makeNewWindow方法来完成的,创建后的对象是PhoneWindow.然后初始化DecorView并将Dialog的视图添加到DecorView中,然后将DecorView添加到window并显示,当Dialog被关闭时,它会通过WindowManager来移除DecorView,初始化的时context必须是Activity的Context,或者把对话框改成系统级别window就可以用Application的context.相关文章推荐
- 《Android 开发艺术探索》笔记——(8)Window 和 WindowManager
- Android开发艺术探索——第八章:理解Window和WindowManager
- 利用Window和WindowManager实现悬浮窗效果——Android开发艺术探索笔记
- 第八章理解Window和WindowManager(Android开发艺术探索)
- 读书笔记-Android开发艺术探索-第8章-理解Window和WindowManager
- 开发艺术探索-- Window及WindowManager
- Android JNI开发流程(android开发艺术探索随笔)
- Android开发艺术探索学习-View的事件分发机制(二)
- Android开发艺术探索学习-IPC之Binder(一)
- Android开发艺术探索学习笔记(六)
- 读书笔记-Android开发艺术探索-第12章-Bitmap的加载和Cache
- Android开发艺术探索学习-View的事件分发机制(一)
- Android开发艺术探索------Bitmap的高效加载
- 任玉刚【Android开发艺术探索】读后笔记二
- Android开发艺术探索—Parcelable接口
- View的滑动冲突解决-android开发艺术探索笔记
- Android IPC之Messenger和AIDL(android开发艺术探索随笔)
- Android开发艺术探索学习-Activity跳转时的生命周期
- Android开发艺术探索学习-IPC之Binder(三)
- Android开发艺术探索学习-View的基本知识