android 窗口类型分析

本文详细分析了Android的窗口类型,包括应用程序窗口、子窗口和系统窗口,探讨了它们的Z-ORDER序列以及WindowManager如何管理Window。同时,介绍了WindowManager.LayoutParams中的窗口类型定义,子窗口和系统窗口的范围,并提及了窗口内存缓存和行为类型。
摘要由CSDN通过智能技术生成

1, 概述

Android窗口类型主要分成了三大类:

1,应用程序窗口。一般应用程序的窗口,比如我们应用程序的Activity的窗口。

2,子窗口。一般在Activity里面的窗口,比如各种菜单等。

3,系统窗口。系统的窗口,比如输入法,Toast,墙纸等。

WindowManager里面窗口的type类型值定义是一个递增保留的连续增大数值。其实就是窗口的Z-ORDER序列(值越大显示的位置越在上面,需要将屏幕想成三维坐标模式)。

2 WindowManager/LayoutParams

2.1 窗口类型

WindowManager(窗口管理)是如何管理Window呢?

WindowManager是一个接口,首先看看里面的关键定义,

窗口类型,

public int type;

应用程序窗口

FIRST_APPLICATION_WINDOW = 1

第一个应用窗口

TYPE_APPLICATION = 2

应用的默认窗口

LAST_APPLICATION_WINDOW = 99

最后的应用窗口

所有acitivty的窗口的值都在[1,99],默认值是TYPE_APPLICATION,WMS在进行窗口叠加时,会动态的改变activity的值。

子窗口

子窗口的Z序和坐标空间都依赖于Activity窗口

所有子窗口的值都在[1000,1999], WMS在进行窗口叠加时,会动态调整子窗口的值。

系统窗口

FIRST_SYSTEM_WINDOW     = 2000

第一个系统窗口

TYPE_STATUS_BAR = FIRST_SYSTEM_WINDOW

状态条

TYPE_SEARCH_BAR = FIRST_SYSTEM_WINDOW+1

搜索条

TYPE_PHONE= FIRST_SYSTEM_WINDOW+2

来电显示窗口

TYPE_SYSTEM_ALERT= FIRST_SYSTEM_WINDOW+3

警告对话框

TYPE_KEYGUARD= FIRST_SYSTEM_WINDOW+4

屏保

TYPE_TOAST= FIRST_SYSTEM_WINDOW+5

Toast

TYPE_SYSTEM_OVERLAY= FIRST_SYSTEM_WINDOW+6

 

TYPE_PRIORITY_PHONE= FIRST_SYSTEM_WINDOW+7

屏幕保护下的来电显示窗口

TYPE_SYSTEM_DIALOG= FIRST_SYSTEM_WINDOW+8

 

TYPE_KEYGUARD_DIALOG= FIRST_SYSTEM_WINDOW+9

屏幕保护下的对话框窗口

TYPE_SYSTEM_ERROR= FIRST_SYSTEM_WINDOW+10

系统错误窗口

TYPE_INPUT_METHOD= FIRST_SYSTEM_WINDOW+11

输入法窗口

系统窗口远不止上面的表格中所展现的,一共定义了33种。

系统窗口的创建一般不依赖于Activity窗口

所有系统窗口的值都在[2000,2999], WMS在进行窗口叠加时,会动态调整子窗口的值。有些系统窗口只能出现一个,不能添加多个,否则用户会觉得很乱(体验差)。比如输入法窗口,系统状态条窗口等。

2.2 窗口内存缓存类型

public int memoryType; // 保存窗口内存缓存类型

窗口内存缓存一共有4种,

public static final int MEMORY_TYPE_NORMAL = 0; //窗口缓冲位于主内存
public static final int MEMORY_TYPE_HARDWARE=1;//窗口缓冲位于可以被DMA访问,或者硬件加速的内存区域
public static final int MEMORY_TYPE_GPU = 2; //窗口缓冲位于可被图形加速器访问的区域
public static final int MEMORY_TYPE_PUSH_BUFFERS = 3; //窗口缓冲不拥有自己的缓冲区,不能被锁定,缓冲区由本地方法提供

2.3 窗口行为类型

public int flags; //保存窗口的行为

窗口行为类型的行为一共32种,数值都是2的n次幂,所以各种flags可以混合使用,直接按位或是最好的方法。

比如最开始四种行为定义如下,

//Flag:当该window对用户可见的时候,允许锁屏
        public static final int FLAG_ALLOW_LOCK_WHILE_SCREEN_ON     = 0x00000001;
        //Flag:让该window后所有的东西都成暗淡
        public static final int FLAG_DIM_BEHIND        = 0x00000002;
        //Flag:让该window后所有东西都模糊(4.0以上已经放弃这种毛玻璃效果)
        public static final int FLAG_BLUR_BEHIND        = 0x00000004;
        //Flag:让window不能获得焦点,这样用户快就不能向该window发送按键事
        public static final int FLAG_NOT_FOCUSABLE      = 0x00000008;

2.4 硬件加速类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值