窗口类型Window type

我们在实际过程中,经常会遇到不同的窗口,Activity、Dialog、Toast、输入法界面等,窗口可以分为三大类:Application Window、Sub Window、System Window。下面简单介绍下窗口的三大类型。

窗口类型定义在WindowManager.java的内部类LayoutParams中,类型如下

1.Application Window应用程序窗口

这类窗口一般是应用程序的窗口,比方说应用程序的Activity

frameworks/base/core/java/android/view/WindowManager.java的LayoutParams内部类
        
public static final int FIRST_APPLICATION_WINDOW = 1;//代表普通应用程序窗口的窗口类型的开始值
       
public static final int TYPE_BASE_APPLICATION   = 1;//应用程序窗口的基础值,其他窗口的值都要大于这个值
      
public static final int TYPE_APPLICATION        = 2;//普通应用程序窗口
       
public static final int TYPE_APPLICATION_STARTING = 3;//应用程序启动时显示的特殊应用程序窗口
       
public static final int TYPE_DRAWN_APPLICATION = 4;//TYPE_APPLICATION 的变体,确保窗口管理器在显示应用程序之前等待此窗口绘制
     
public static final int LAST_APPLICATION_WINDOW = 99;//应用程序窗口类型的结束。

所以,Application Window的type值范围是1~99

2.Sub Window子窗口

这类窗口无法独立存在,需要依附其他类型窗口,一般是Activity里面的窗口,比如各类菜单窗口等


public static final int FIRST_SUB_WINDOW = 1000;//表示子窗口类型的开始值,子窗口的Z序和坐标空间都依赖于Activity窗口。

public static final int TYPE_APPLICATION_PANEL = FIRST_SUB_WINDOW;//面板窗口。 这些窗口出现在其附加窗口的上传。
        
public static final int TYPE_APPLICATION_MEDIA = FIRST_SUB_WINDOW + 1;//用于显示媒体(如视频)的窗口。 这些窗口显示在其附加窗口的下层。
        
public static final int TYPE_APPLICATION_SUB_PANEL = FIRST_SUB_WINDOW + 2;//应用程序窗口的子面板,显示于所有面板窗口的上层。
        
public static final int TYPE_APPLICATION_ATTACHED_DIALOG = FIRST_SUB_WINDOW + 3;//和面板窗口类似,但窗口的布局是作为顶级窗口的布局,而不是作为其容器的子窗口。
        
public static final int TYPE_APPLICATION_MEDIA_OVERLAY  = FIRST_SUB_WINDOW + 4;//用于在媒体窗口顶部显示叠加层的窗口,需要实现透明(半透明)效果,例如:字幕
       
public static final int TYPE_APPLICATION_ABOVE_SUB_PANEL = FIRST_SUB_WINDOW + 5;//应用程序窗口顶部的子面板及其子面板窗口
        
public static final int LAST_SUB_WINDOW = 1999;//子窗口类型结束值

Sub Window窗口的type值范围是1000~1999

3.System Window系统窗口

这类窗口一般是系统创建,比方说状态栏、通知栏、Toast、输入法、Wallpaper等

public static final int FIRST_SYSTEM_WINDOW     = 2000;//系统窗口的开始值

public static final int TYPE_STATUS_BAR         = FIRST_SYSTEM_WINDOW;//状态栏。 状态栏窗口只能有一个,它位于屏幕顶部,所有其他窗口都向下移动,位于屏幕下方

public static final int TYPE_SEARCH_BAR         = FIRST_SYSTEM_WINDOW+1;//搜索栏。 搜索栏窗口只能有一个; 它位于屏幕顶部。

public static final int TYPE_PHONE              = FIRST_SYSTEM_WINDOW+2;//电话。这些是非应用程序窗口,提供用户与电话的交互(特别是来电)这类窗口通常放置在所有应用程序上方,但位于状态栏后面

public static final int TYPE_SYSTEM_ALERT       = FIRST_SYSTEM_WINDOW+3;//系统窗口,如低电量警报。 这些窗口始终位于应用程序窗口的顶部。

public static final int TYPE_KEYGUARD           = FIRST_SYSTEM_WINDOW+4;//锁屏窗口

public static final int TYPE_TOAST              = FIRST_SYSTEM_WINDOW+5;//Toast窗口。用于显示toast

public static final int TYPE_SYSTEM_OVERLAY     = FIRST_SYSTEM_WINDOW+6;//系统覆盖窗口,需要显示在其他所有内容之上。 这些窗口不得获取输入焦点,否则会干扰锁屏

public static final int TYPE_PRIORITY_PHONE     = FIRST_SYSTEM_WINDOW+7;//电话优先,即使是处于锁屏状态也要显示,但是不能获取焦点,否则会干扰锁屏

public static final int TYPE_SYSTEM_DIALOG      = FIRST_SYSTEM_WINDOW+8;//系统对话框

public static final int TYPE_KEYGUARD_DIALOG    = FIRST_SYSTEM_WINDOW+9;//锁屏时显示的对话框

public static final int TYPE_SYSTEM_ERROR       = FIRST_SYSTEM_WINDOW+10;//内部系统错误窗口,出现在所有可能的内容之上。

public static final int TYPE_INPUT_METHOD       = FIRST_SYSTEM_WINDOW+11;//输入法窗口,出现在普通ui上。 应用程序窗口可以调整大小或平移,以在显示此窗口时保持输入焦点可见

public static final int TYPE_INPUT_METHOD_DIALOG= FIRST_SYSTEM_WINDOW+12;//输入法对话框窗口,出现在当前输入法窗口上方。

public static final int TYPE_WALLPAPER          = FIRST_SYSTEM_WINDOW+13;//壁纸窗口,放置在任何想要位于壁纸之上的窗口后面。

public static final int TYPE_STATUS_BAR_PANEL   = FIRST_SYSTEM_WINDOW+14;//从状态栏上方滑出的面板

public static final int TYPE_SECURE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW+15;//安全系统覆盖窗口,需要显示在其他所有内容之上。 这些窗口不得获取输入焦点,否则会干扰锁屏

public static final int TYPE_DRAG               = FIRST_SYSTEM_WINDOW+16;//drag窗口

public static final int TYPE_STATUS_BAR_SUB_PANEL = FIRST_SYSTEM_WINDOW+17;//从状态栏上方滑出的子面板

public static final int TYPE_POINTER = FIRST_SYSTEM_WINDOW+18;//鼠标窗口

public static final int TYPE_NAVIGATION_BAR = FIRST_SYSTEM_WINDOW+19;//导航栏

public static final int TYPE_VOLUME_OVERLAY = FIRST_SYSTEM_WINDOW+20;//当用户更改系统音量时显示的音量级别覆盖/对话框。

public static final int TYPE_BOOT_PROGRESS = FIRST_SYSTEM_WINDOW+21;//进度条

public static final int TYPE_INPUT_CONSUMER = FIRST_SYSTEM_WINDOW+22;//当系统UI栏隐藏时消耗输入事件的窗口类型。

public static final int TYPE_NAVIGATION_BAR_PANEL = FIRST_SYSTEM_WINDOW+24;//导航栏面板

public static final int TYPE_DISPLAY_OVERLAY = FIRST_SYSTEM_WINDOW+26;//显示覆盖窗口。 用于模拟辅助显示设备。

public static final int TYPE_MAGNIFICATION_OVERLAY = FIRST_SYSTEM_WINDOW+27;//放大叠加窗口。 用于在启用辅助功能放大功能时突出显示显示的放大部分。

public static final int TYPE_PRIVATE_PRESENTATION = FIRST_SYSTEM_WINDOW+30;//私有虚拟显示器顶部的演示窗口。

public static final int TYPE_VOICE_INTERACTION = FIRST_SYSTEM_WINDOW+31;//语音交互层的窗口。

public static final int TYPE_ACCESSIBILITY_OVERLAY = FIRST_SYSTEM_WINDOW+32;//无障碍窗口,可以在所有的应用程序之上展示。

public static final int TYPE_VOICE_INTERACTION_STARTING = FIRST_SYSTEM_WINDOW+33;//语音交互层的启动窗口。

public static final int TYPE_DOCK_DIVIDER = FIRST_SYSTEM_WINDOW+34;//调整分屏模式下每个窗口大小的分割线

public static final int TYPE_QS_DIALOG = FIRST_SYSTEM_WINDOW+35;//快捷设置弹窗

public static final int TYPE_SCREENSHOT = FIRST_SYSTEM_WINDOW + 36;//截屏窗口

public static final int TYPE_PRESENTATION = FIRST_SYSTEM_WINDOW + 37;//用于演示的窗口。

public static final int TYPE_APPLICATION_OVERLAY = FIRST_SYSTEM_WINDOW + 38;//应用程序覆盖窗口,显示在所有Activity窗口上方,但位于关键系统窗口(如状态栏或 IME)下方。

public static final int TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY = FIRST_SYSTEM_WINDOW + 39;//用于在其他窗口上方添加辅助窗口放大功能的窗口。
这会将窗口放置在覆盖窗口中。

public static final int TYPE_NOTIFICATION_SHADE = FIRST_SYSTEM_WINDOW + 40;//通知栏

public static final int TYPE_STATUS_BAR_ADDITIONAL = FIRST_SYSTEM_WINDOW + 41;//用于在屏幕的非常规部分(即屏幕的左侧或底部)显示状态栏。

public static final int LAST_SYSTEM_WINDOW      = 2999;//系统窗口的结束值

System Window窗口的type值范围是2000~2999

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值