`
king_tt
  • 浏览: 2124332 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android中对话框的类型

 
阅读更多
关于android的窗口,大家可能第一时间想到的就是那个window类,真正的窗口是他吗,我们能看到他吗?我看不到它,我看到的是View,所以窗口实际上就是View,window只是与远程的WindowManagerService进行通信的类。
在Framework层,到底有几种窗口类型,在WindowManager中一定了三种类型的窗口,
在WindowManager这个接口中进行了解释,下面是原话
The general type of window.There are three main classes of
* window types:

Application windows (ranging from
FIRST_APPLICATION_WINDOW to
LAST_APPLICATION_WINDOW) are normal top-level application
windows.For these types of windows, the token must be
set to the token of the activity they are a part of (this will
normally be done for you if link token is null).
Sub-windows (ranging from
FIRST_SUB_WINDOW to
LAST_SUB_WINDOW are associated with another top-level
window.For these types of windows, the token must be
the token of the window it is attached to.
System windows (ranging from
FIRST_SYSTEM_WINDOW to
LAST_SYSTEM_WINDOW are special types of windows for
use by the system for specific purposes.They should not normally
be used by applications, and a special permission is required
to use them.


意思是大体分三种窗口,每种窗口都是用int类型的值来标示,
窗口类型如下:
  • 应用窗口:这个窗口就是Activity所对应的窗口,范围是FIRST_APPLICATION_WINDOW 到 LAST_APPLICATION_WINDOW,
    token是Activity的token
  • 子窗口:从名字上可以看出,它要依附于一个父窗口,token是它的父窗口的token。它的父窗口可以是应用窗口或者其他的类型的窗口。范围是 FIRST_SUB_WINDOW 到 LAST_SUB_WINDOW
  • 系统窗口:从名称上可以看出来,是和系统进程相关的,理论上普通程序是不能创建系统窗口的,范围是 FIRST_SYSTEM_WINDOW 到 LAST_SYSTEM_WINDOW 。
具体的值是多少,请看如下源码:
先看下应用窗口的类型值:



代表普通的应用窗口的开始类型,也就是第一个应用窗口。




英文大体意思是:这个类型的窗口是整个应用程序的基础窗口,所有的其他应用窗口都是在其上显示。



一个普通的应用窗口类型,这个窗口的token必须是这个窗口对应的Activity中的token





一个特别的应用窗口类型,当应用程序在启动的时候显示。这样的窗口普通的应用程序无法使用,这种窗口应用在这种情况下,当普通的应用程序启动
成功之前,系统用来去用这种窗口显示一些东西。




最后一个应用窗口

从上面可以看出,应用窗口的值是1-99之间(包括1和99),在这个范围的窗口都是应用窗口。

接着看下子窗口



这个是子窗口的开始,这种类型的窗口的token必须设置成它依附的父窗口的token,也就是说和父窗口的token是同一个token。子窗口
显示在其父窗口之上(使用z-order表示,也就是所谓的层)




这个不解释,自行翻译。PopupWindow用的这个类型的。





上面的这两种在源码中没有用到






ContextMenu使用的这个







这个是透明的中间窗口,源码没用到。



最后的子类型窗口


从上面可以看出,其值从1000-1999(包括1000和1999),在这个范围的都是子窗口



下面看下系统窗口




系统的开始窗口,由系统创建。



状态栏窗口



搜索窗口



电话窗口,在所有应用窗口之上,在状态栏窗口之下。



系统的弹出框窗口,也是在应用窗口之上,电量低弹出的窗口就是这种的。



屏保窗口


Toast窗口,就是咱们写提示的那个小窗口。





这个源码没用到。


这个是锁屏情况下的电话窗口。



这个是从状态栏滑下来的面板,现在不明白是啥东西。



屏保弹出的对话框窗口。




系统错误窗口,在所有的窗口之上。




输入法窗口。




输入法窗口弹出的对话框



墙纸窗口,可以放在任何其他窗口之下。







从状态栏滑下来的窗口。




系统安全窗口:感觉就是咱们安装程序的那个窗口,这里只是猜测,没有验证,验证之后再改正过来。



这是就是最后一个系统窗口了。

系统窗口的值在2000-2999之间(包括两端)

以上就简单介绍了android窗口的类型。

看下继承关系,下次装上UML工具之后画一下他们的关系,暂时先看文字吧:

public interface WindowManager extends ViewManager
public class WindowManagerImpl implements WindowManager
LocalWindowManager implements WindowManager

每个window包含一个WindowManager,是LocalWindowManager,只是WindowManager的一个壳,LocalWindowManager里包装了一个WindowManagerImpl
,WindowManagerImpl才是真正的实现类。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics