在 Android 系统中,窗口(Window)按照功能和层级

本文详细介绍了Android系统中窗口的分类,包括应用窗口、子窗口和系统窗口,以及WindowManager.LayoutParams中的type属性如何决定窗口层级。重点阐述了窗口的Z-order和不同类型的窗口权限和行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 Android 系统中,窗口(Window)按照功能和层级可分为以下几大类:

1. **应用窗口(Application Windows)**
   - 这是最常见的一类窗口,代表了应用程序的主要视图界面,例如 Activity 窗口。每当启动一个新 Activity 时,系统都会为其创建一个新的应用窗口。应用窗口的 Z-order(堆叠顺序)位于系统窗口之下,子窗口之上。

2. **子窗口(Sub-windows)**
   - 子窗口是依附于应用窗口之上的附加窗口,它们通常嵌入在 Activity 的布局中,或者暂时出现在 Activity 之上。例如,PopupWindow、Dialog、ContextMenu、OptionMenu 等都是子窗口的例子。子窗口的 Z-order 高于应用窗口,但低于系统窗口。

3. **系统窗口(System Windows)**
   - 系统窗口拥有最高的 Z-order,它们通常由系统服务创建和管理,可以覆盖在所有应用窗口之上。这类窗口包括但不限于:
     - 状态栏(StatusBar):显示时间、电池状态、通知等系统信息。
     - 导航栏(NavigationBar):包含 Home、Back 和 Recent Apps 等按键。
     - 输入法(Input Method):虚拟键盘弹出时显示。
     - Toast:短时显示的提示信息。
     - 通知栏(Notification shade):从顶部下拉显示的通知中心。
     - 快速设置面板(Quick Settings):进一步下拉显示的快捷设置选项。

窗口的层级关系决定了它们在屏幕上的显示顺序和相互覆盖关系,一般来说,层级越高(type 值越大)的窗口会显示在顶部,遮盖住层级较低的窗口。应用程序可以通过 WindowManager 的 API 来添加、移除和控制窗口的行为。

在 Android 中,当我们讨论窗口(Window)的类型(type)时,主要是指 WindowManager.LayoutParams 中的 `type` 属性。这个属性定义了窗口所属的类别,进而决定其在窗口堆栈中的层级、行为以及其他窗口对其的遮挡关系。

WindowManager.LayoutParams 中的 `type` 常见取值包括:

1. **应用窗口类型(Application Windows)**
   - `TYPE_APPLICATION`
   - `TYPE_APPLICATION_PANEL`(应用面板窗口,例如:popupWindow)
   - `TYPE_APPLICATION_MEDIA`(媒体播放窗口)
   - `TYPE_APPLICATION_SUB_PANEL`(子面板窗口)

2. **子窗口类型(Sub-windows)**
   - `TYPE_PHONE`(电话窗口,例如拨号盘)
   - `TYPE_TOAST`(Toast 窗口)
   - `TYPE_SYSTEM_ALERT`(系统警报窗口)
   - `TYPE_SYSTEM_DIALOG`(系统对话框窗口)

3. **系统窗口类型(System Windows)**
   - `TYPE_STATUS_BAR`(状态栏)
   - `TYPE_NAVIGATION_BAR`(导航栏)
   - `TYPE_SYSTEM_OVERLAY`(系统覆盖层,如一些悬浮窗效果)
   - `TYPE_INPUT_METHOD`(输入法窗口)

窗口类型 `type` 的值越小,窗口的层级就越低,越容易被其他窗口遮挡;反之,值越大,窗口的层级越高,更容易覆盖在其他窗口之上。此外,不同类型窗口还受到权限和安全策略的限制,例如普通应用一般不允许创建系统类型的窗口。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值