Window 布局参数简单描述

文章目录

  • 一、LayoutParams.type
  • 二、LayoutParams.flags
  • 三、Gravity、dimAmount、buttonBrightness、Alpha、format
  • 四、x、y、windth、heigth

一、LayoutParams.type

表示窗口的类型,type 大的会遮住 type 小的,相同的看焦点在谁身上。刚打开的 Window 会自动拥有焦点。

值范围 表示类型 说明 要求
0 - 999 应用程序窗口 一般情况下应用显示的窗口就是此类型
1000 - 1999 子窗口,也可以叫普通弹窗 Dialog 或 PopWindow 等显示的类型,type 值较高,会显示在应用程序窗口之上 普通弹窗显示需要一个依附的 window ,弹窗的显示需要 token 非空,token 来自依附的 window
2000 - 2999 系统级窗口 最高等级的窗口,一般作为系统自身应用使用,例如来电、下拉屏的显示等等 要求应用程序安装于 /system/app,签名需要使用系统签名,2038 特殊值除外
public static final int FIRST_SYSTEM_WINDOW     = 2000;
public static final int TYPE_APPLICATION_OVERLAY = FIRST_SYSTEM_WINDOW + 38;

特殊值 2038,即 TYPE_APPLICATION_OVERLAY,该值是唯一不用作为系统应用就可以使用的系统级窗口。如果有需要遮住 0 - 1999 的,使用即可。
使用 2038 特殊值:

  1. manifest 中添加权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
  1. 代码中对SDK版本判断(Android 6 后需要用户手动允许,不然不给用,对应 SDK 为 23,代码为 Build.VERSION_CODES.M)
//如果没有权限就跳转设置去给权限,权限申请方式很多,这个不能用在实际中,只是做个表示
if (!Settings.canDrawOverlays(this)) {Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);startActivity(intent);return;
}

系统级窗口中,除了特殊值 2038 ,若要使用,应用程序必须是安装在 /system/app 下且签名使用系统签名,才可以使用。测试玩的话,可以用 adb push、打包系统签名安装来测。

二、LayoutParams.flags

定义窗口的行为,只记录未被弃用的,有些在SDK30,SDK27等弃用的就没记录。

名称 含义
FLAG_ALLOW_LOCK_WHILE_SCREEN_ON 1 (0x00000001) 只要该窗口对用户可见,允许锁定屏幕在屏幕打开时激活。这可以单独使用,也可以与FLAG_KEEP_SCREEN_ON和/或FLAG_SHOW_WHEN_LOCKED结合使用
FLAG_ALT_FOCUSABLE_IM 131072 (0x00020000) 当设置时,反转窗口的输入法聚焦性。设置这个标志的效果取决于是否设置了FLAG_NOT_FOCUSABLE:
如果没有设置FLAG_NOT_FOCUSABLE,即当窗口是可聚焦的,设置这个标志可以防止该窗口成为输入法的目标。因此,它将不能与输入法交互,并且将被分层在输入法之上(除非在它之上有另一个输入法目标)。
如果设置了FLAG_NOT_FOCUSABLE,则设置此标志将请求将窗口作为输入法目标,即使该窗口不可聚焦。因此,它将被置于输入法的下面。注意:设置了FLAG_NOT_FOCUSABLE的窗口不能与输入法交互,不管这个标志是什么
FLAG_BLUR_BEHIND 4 (0x00000004) 模糊显示 Window 后面的内容
FLAG_DIM_BEHIND 2 (0x00000002) Window 后的视图都会变暗。使用dimAmount来控制暗度
FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS -2147483648 (0x80000000) 标志表示此窗口负责绘制系统栏的背景。如果设置了,系统栏将以透明的背景绘制,该窗口中的相应区域将用window #getStatusBarColor()和window #getNavigationBarColor()中指定的颜色填充
FLAG_HARDWARE_ACCELERATED 16777216 (0x01000000) 请求硬件加速显示该 Window。请求硬件加速并不能保证它会发生,需要在设置显示的 View 之前设置,并且硬件加速被禁用之后不能使用该 flags
FLAG_IGNORE_CHEEK_PRESSES 32768 (0x00008000) 窗口会积极过滤事件流,以防止在这种情况下无意的按压,当这样的事件流检测到,应用程序将收到一个CANCEL运动事件来指示这一点,因此应用程序可以相应地处理,不采取任何行动,直到手指被释放
FLAG_KEEP_SCREEN_ON 128 (0x00000080) 只要这个窗口对用户是可见的,保持设备的屏幕打开和明亮,Window 常亮和不遮挡
FLAG_LAYOUT_IN_SCREEN 256 (0x00000100) 将窗口置于整个屏幕中,忽略来自父窗口的任何约束。注意:在有DisplayCutout的显示器上,如果必要,根据layoutInDisplayCutoutMode,可以将窗口放置为避免DisplayCutout区域
FLAG_LAYOUT_NO_LIMITS 512 (0x00000200) 允许窗口扩展到屏幕之外,宽高超过屏幕的大小
FLAG_LOCAL_FOCUS_MODE 268435456 (0x10000000) 标志为处于本地聚焦模式的窗口。处于本地聚焦模式的窗口可以使用windows# setLocalFocus(boolean, boolean)独立于窗口管理器控制焦点。通常这种模式下的窗口不会从窗口管理器获得触摸/按键事件,而只会通过使用windows# injectInputEvent(InputEvent)的本地注入获得事件
FLAG_NOT_FOCUSABLE 8 (0x00000008) 这个窗口永远不会得到按键输入焦点,所以用户不能向它发送按键或其他按键事件。这些将会转到后面的可聚焦窗口。无论是否显式设置,此标志也将启用FLAG_NOT_TOUCH_MODAL。设置这个标志还意味着窗口将不需要与软输入法交互,因此它将是Z-ordered,并独立于任何活动输入法(通常这意味着它在输入法之上得到Z-ordered,因此它可以使用全屏显示其内容,并在需要时覆盖输入法。您可以使用FLAG_ALT_FOCUSABLE_IM来修改此行为
FLAG_NOT_TOUCHABLE 16 (0x00000010) 这个 Window 不会接收任何触碰事件
FLAG_NOT_TOUCH_MODAL 32 (0x00000020) 不接受非 Window 区域的事件,多个不重叠的 Window 能各接收各的事件
FLAG_SCALED 16384 (0x00004000) 显示在 Window 中的视图会进行缩放填充
FLAG_SECURE 8192 (0x00002000) 设置当前窗口不会被截图之类的操作
FLAG_SHOW_WALLPAPER 1048576 (0x00100000) 要求系统墙纸显示在窗口后面。窗户表面必须是半透明的,以便能够看到后面的墙纸;这个标志只是确保墙纸表面将在那里,所以不设置透明度并不能看到壁纸
FLAG_SPLIT_TOUCH 8388608 (0x00800000) 当设置该窗口时,该窗口将接受超出其边界的触摸事件发送到其他也支持分割触摸的窗口。当这个标志没有设置时,第一个向下的指针决定了所有后续触摸的窗口,直到所有指针向上为止。当设置了这个标志时,每个向下的指针(不一定是第一个)决定了该指针的所有后续触摸都将指向哪个窗口,直到该指针向上,从而允许多个指针的触摸被拆分到多个窗口
FLAG_WATCH_OUTSIDE_TOUCH 262144 (0x00040000) 如果你设置了FLAG_NOT_TOUCH_MODAL,你可以设置这个标志来接收一个带有动作MotionEvent的特殊的MotionEvent。ACTION_OUTSIDE用于在窗口之外发生的触摸。注意,您不会收到完整的向下/移动/向上手势,只会收到第一个向下的位置作为ACTION_OUTSIDE

三、Gravity、dimAmount、buttonBrightness、Alpha、format

Gravity:和布局中的 layout_gravity 效果类似,根据值确定,在屏幕中的哪里显示。

dimAmount:当 flags 设置了 FLAG_DIM_BEHIND 时,这是要应用的调光量。范围从1.0(全黑)到0.0(全亮)。

buttonBrightness:这可以用来覆盖按钮和键盘背光的标准行为。如果值小于0(默认值),则表示使用标准背光行为。0到1调整亮度从黑暗到充分明亮。

alpha:Window 的透明度

format:所需的位图格式。可能是PixelFormat中的常量之一。格式的选择可能会被setColorMode(int)覆盖。默认是不透明的。

四、x、y、windth、heigth

x:Window 所在的横坐标

y:Window 所在的纵坐标

width:窗口显示的宽度

heighth:窗口显示的高度

Window布局参数简单描述相关推荐

  1. android时间轴左右交叉布局,快速简单的定制一个时间轴布局(LinearLayout)

    github: 先上图: 很多情况下,我们都会遇到需要类似于时间轴的一个布局,网上也有很多,但是很多情况下我们其实并不需要那么多库,毕竟64k限制就在那,不管我们用还是不用,它依然在那... 而且更多 ...

  2. 谈谈利用JavaScript结合相对单位rem实现自适应布局的简单而实用的方法

    谈谈利用JavaScript结合相对单位rem实现自适应布局的简单而实用的方法 rem是css3新增的一个相对单位,相对的只是HTML根元素,可以只修改根元素字体大小就可以成比例地调整所有字体大小.我 ...

  3. RecyclerView多布局的简单使用

    RecyclerView多布局的简单 RecyclerView 是在Android5.0之后推出的,是一个比ListView更加灵活更加高效的适配器类型控件.但是RecyclerView不同于其他类型 ...

  4. 通过调试微信小程序示例代码解析flex布局参数功能(一)

    通过调试微信小程序示例代码解析flex布局参数功能 官方示例小程序源代码下载地址:https://github.com/wechat-miniprogram/miniprogram-demo 通过调试 ...

  5. 简单描述下微信小程序的相关文件类型?

    简单描述下微信小程序的相关文件类型? 微信小程序项目结构主要有四个文件类型,如下: .WXML 是框架设计的一套标签语言,结合基础组件.事件系统,可以构建出页面的结构.内部主要是微信自己定义的一套组件 ...

  6. php margin参数,margin参数简单介绍_html/css_WEB-ITnose

    margin参数简单介绍: 此属性是用来设置元素的外边距的,再简单不过了,这里就不多介绍了,唯一可能造成困扰的就是它的参数,因为它最多可以有4个参数,当然也有缩写的形式,比如可以只带一个参数,下面就简 ...

  7. Window.Open() 和 window.showModalDialog()参数

    Window.Open()参数: <SCRIPT LANGUAGE="javascript"> <!-- window.open ('page.html', 'n ...

  8. TCP/IP 协议标准简单描述

    TCP/IP 协议标准简单描述 说明 分为三部分:中文名称.缩写.说明. 应用层 DNS 域名服务 (DNS) 功能: 将域名转化为IP地址 BOOTP 引导程序协议 (BOOTP) 功能: 允许无盘 ...

  9. 如果你要实现IOC,请简单描述一下实现步骤?

    如果你要实现IOC,请简单描述一下实现步骤? 实现IOC的步骤: ①定义用来描述bean的配置的Java类. ②解析bean的配置,将bean的配置信息转换为BeanDefinition对象保存到内存 ...

最新文章

  1. 当前流行的J2EE WEB应用架构分析
  2. linux solusos 软件包管理工具 eopkg 简介
  3. python语言的格式框架_django框架模板语言使用方法详解
  4. html让下拉条消失,CSS 实现隐藏滚动条同时又可以滚动
  5. 第二届360杯全国大学生信息安全技术大赛部分解题思路(加密解密题)
  6. C++ .template 关键字
  7. 导致此错误的原因是什么 - “致命错误:无法找到本地咕噜声”
  8. 又在折腾那个手机骷髅病毒,真无聊
  9. UVALive - 2911 Maximum
  10. redis 哈希hash实例应用
  11. 巨子生物在香港上市:薇娅突击入股,范代娣、严建亚夫妇提前套现
  12. php安全新闻早八点-Microdoor-第二季
  13. matlab添加旁白,在MATLAB中向已知信号添加高斯白噪声 (转载)
  14. 【node路由封装,减轻后端的主路由的入口app.js的负重】
  15. <力扣(LeetCode)>141、环形链表(链表基础解法)java
  16. 动态gif图片如何在线做?轻松实现图片在线生成gif
  17. 使用 Drawable 实现图标角标
  18. Bada学习-终止应用
  19. 中英文切换_儿子6岁了,我和他中英文自然切换的日常
  20. 搭建LittlevGL PC模拟器环境

热门文章

  1. Git——修改远程分支名称
  2. linux 文件夹拷贝6,UbuntuLinux6.06把光盘复制成ISO文件方法
  3. Ubuntu 16.04 设置菜单栏位置
  4. 积分兑换商城是企业的下一个红利期,你知道多少?
  5. pywin32 python3.6_windos64位下python3.6安装pywin32的问题
  6. 被信任的感觉,我是真的没想到。。
  7. 漫话:如何给女朋友解释为什么双11无法修改收货地址
  8. python中打散数组shuffle
  9. 技术岗结贴:准备转行
  10. Java之@Autowired再分析