Android中对话框的类型
16lz
2021-01-24
关于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类型的值来标示,
窗口类型如下:
先看下应用窗口的类型值:
代表普通的应用窗口的开始类型,也就是第一个应用窗口。
英文大体意思是:这个类型的窗口是整个应用程序的基础窗口,所有的其他应用窗口都是在其上显示。
一个普通的应用窗口类型,这个窗口的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才是真正的实现类。
在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才是真正的实现类。
更多相关文章
- JNI 数据类型转换
- Android(安卓)电话系统rild分析
- Android(安卓)之 系统广播机制BroadcastReceiver的使用
- android 以编码的方式列出来当前app所有的窗口
- android 面试题三
- Andorid中的SOA
- Android(安卓)Binder 修炼之道(三)Binder 系统C++实现 BpXXX代理类
- Android中的服务(service)详解(一)
- Android权限获取机制与常见权限不足问题分析