windowmanager,View.inflate()学习笔记

    技术2022-05-20  67

    整 个Android的窗口机制是基于一个叫做 WindowManager,这个接口可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,直接忽略我们以 前的Activity或者Dialog之类的东东。其实我们的Activity或者Diolog底层的实现也是通过WindowManager,这个 WindowManager是全局的,整个系统就是这个唯一的东东。它是显示View的最底层了

     

    API里关于windowmanager的描述

    The interface that apps use to talk to the window manager.

     

    程序们(-_-;)用来和window manager对话的接口。它继承了 ViewManager接口(有意思,实现了另一个接口的接口)

    所以自然也就集成了ViewManager的三个方法

     

    abstract void     addView(View view, ViewGroup.LayoutParams params)  //添加视图

    abstract void     removeView(View view)    //移除视图 abstract void     updateViewLayout(View view, ViewGroup.LayoutParams params)  //升级Viewlayout?

     

     

    windowmanager有2个静态嵌套类

     

    WindowManager.BadTokenException

    Exception that is thrown when trying to add view whose WindowManager.LayoutParams token is invalid.

     

    当视图添加一个标志已无效的View时,将会抛出这样一个异常。

    (我一开始的时候没有在manifest里添加权限时,也曾经抛出过这个异常)

     

    WindowManager.LayoutParams

     

    重头戏来了,使用windowmanager比较简单,就三个方法,add,move,update

    但是在WindowManager.LayoutParams里可以设置View的XML属性,除了基本的width ,height外还有很多,能够进行各种组合配置,完成各种效果

    呵呵,详细的可能要慢慢研究了,现在先记个大概的概念框架

     

    如果要用windowmanager来实现一个简单的悬浮窗操作,在获得了windowmanager和windowmanager.LayoutParams之后

    接着就要定义一个View对象,并对这个对象进行填充

    于是就要用到View.inflate()方法了.

    public static View inflate (Context context, int resource, ViewGroup root)

    Inflate a view from an XML resource. This convenience method wraps the LayoutInflater class, which provides a full range of options for view inflation.

     

    用一个XML源填充view.

     


    最新回复(0)