FLAG_ALLOW_LOCK_WHILE_SCREEN_ON

只要这个window对用户是可见的,则允许在屏幕开启的时候锁定屏幕这个flag可以单独的使用,也可以配合FLAG_KEEP_SCREEN_ON和(或者) FLAG_SHOW_WHEN_LOCKED使用

FLAG_DIM_BEHIND

所有在这个window之后的会变暗,使用dimAmount属性来控制变暗的程度(1.0不透明,0.0完全透明)

FLAG_NOT_FOCUSABLE

设置之后window永远不会获取焦点,所以用户不能给此window发送点击事件焦点会传递给在其下面的可获取焦点的window这个flag同时会启用 FLAG_NOT_TOUCH_MODAL, 不管你有没有手动设置设置这个flag同时表明了这个window不会和软键盘交互,(这句话的翻译我不知道对不对)所以window会独立于激活的软键盘之上(这句话的意思就是window会在Z轴上置于输入法之上,所以window可以全屏使用来覆盖住输入法,你可以使用FLAG_ALT_FOCUSABLE_IM 来修改这个行为)

FLAG_NOT_TOUCHABLE

这个window永远无法获取点击事件

FLAG_NOT_TOUCH_MODAL

即使这个window是可获取焦点的,也允许window之外点击事件传递给其他在其之后的indow

如果不设置这个值,则window消费掉所有点击事件,不管这些点击事件是不是在window的范围之内。//如果要做悬浮框,我想这个flag肯定得设置,但api>=23就别想了。这个flag简而言之就是说,当前window区域以外的点击事件传递给下层window,当前window区域以内的点击事件自己处理

FLAG_TOUCHABLE_WHEN_WAKING

当设置了这个值,则device休眠的时候,当触摸屏被点击,window会收到首次点击事件,通常当用户看不见东西时,首次点击事件会被系统消费

FLAG_KEEP_SCREEN_ON

当这个window对用户是可见状态,则保持设备屏幕不关闭且不变暗

FLAG_LAYOUT_IN_SCREEN

将window放置在整个屏幕之内,无视其他的装饰(比如状态栏)window要在考虑到屏幕的其他装饰来定位其中的内容这个flag通常使用Window类的setFlags(int, int)方法来设置

FLAG_LAYOUT_NO_LIMITS

允许window扩展值屏幕之外

FLAG_FULLSCREEN

当这个window显示的时候,隐藏所有的装饰物(比如状态栏)这个flag允许window使用整个屏幕区域当设置这个flag的window处于顶层的时候,状态栏会被隐藏全屏的时候会忽略 softInputMode 变量设置的SOFT_INPUT_ADJUST_RESIZE 效果,屏幕会不保持全屏且不会resize这个flag可以在主题属性(theme)中来控制通过 windowFullscreen 属性来控制

在一些常用的全屏主题中这个属性已经被设置好了

常用全屏主题:

Theme_NoTitleBar_Fullscreen,

Theme_Black_NoTitleBar_Fullscreen,

Theme_Light_NoTitleBar_Fullscreen,

Theme_Holo_NoActionBar_Fullscreen,

Theme_Holo_Light_NoActionBar_Fullscreen,

Theme_DeviceDefault_NoActionBar_Fullscreen,

Theme_DeviceDefault_Light_NoActionBar_Fullscreen.

FLAG_FORCE_NOT_FULLSCREEN

覆盖FLAG_FULLSCREEN效果,并强制显示屏幕上的一些装饰(如状态栏)

FLAG_SECURE

把这个window中的内容看作需要保护的内容,防止被截屏,或防止内容显示在一些不安全的屏幕上

FLAG_IGNORE_CHEEK_PRESSES

这个flag一般用于,当用户把脸贴在屏幕上,它会过滤不需要的点击事件,当检测到一个事件流,这个程序会直接接收到一个CANCEL事件.这样程序可以正确的处理这种情况,直到手指离开屏幕

FLAG_LAYOUT_INSET_DECOR

这个flag只能配合 FLAG_LAYOUT_IN_SCREEN 一起使用.当在屏幕中请求layout时,window可能在一些装饰物(如状态栏)之上或者之后当使用这个flag时,window manager会报告插入window的矩形大小,来确保你的内容不会被装饰物(如状态栏)掩盖.这个flag一般用Window类的 setFlags(int, int)方法来设置

FLAG_ALT_FOCUSABLE_IM

转变 FLAG_NOT_FOCUSABLE 设置的状态,关于这个window是怎么和当前的输入法交互

如果设置了FLAG_NOT_FOCUSABLE且FLAG_ALT_FOCUSABLE_IM也设置了,那么当这个window和input method交互的时候会被放置在input method后面或者旁边.如果FLAG_NOT_FOCUSABLE没有设置而设置了FLAG_ALT_FOCUSABLE_IM,那么window不需要和input method交互,可以放置在输入法上面

FLAG_WATCH_OUTSIDE_TOUCH

如果你已经设置了FLAG_NOT_TOUCH_MODAL,那么你可以设置FLAG_WATCH_OUTSIDE_TOUCH这个flag,这样一个点击事件如果发生在你的window之外的范围,你就会接收到一个特殊的MotionEvent,MotionEvent.ACTION_OUTSIDE注意,你只会接收到点击事件的第一下,而之后的DOWN/MOVE/UP等手势全都不会接收到

FLAG_SHOW_WHEN_LOCKED

一个特殊的flag,使得window可以在锁屏状态下显示,这个flag会使得window比keyguard或其他锁屏界面具有更高的层级可以配合FLAG_KEEP_SCREEN_ON使用,点亮屏幕,在显示keyguard window之前显示你的window.可以配合FLAG_DISMISS_KEYGUARD使用来自动解锁没密码的keyguards这个flag只能应用在最顶层的全屏window上,用人话说就是可以让window显示在锁屏界面上

FLAG_TURN_SCREEN_ON

当window被添加或者显示,系统会点亮屏幕,就好像用户唤醒屏幕一样

FLAG_DISMISS_KEYGUARD

当使用的是无密码的锁屏界面,显示此window会使锁屏界面被自动解锁,其他废话就不翻译了

FLAG_SPLIT_TOUCH

当window设置这个flag,window会接收来自window边界之外发送给其他window的点击事件,支持多点触控.当这个flag没有设置的时候,第一下点击则决定了哪个window会接收整个点击事件,直到手指拿开.当设置了这个flag,这每一个点击事件(不一定是第一个)都决定了那个window来接收剩下的点击事件,直到手指拿开.点击事件会被分开传递给多个window.貌似是关于多点触控的

FLAG_HARDWARE_ACCELERATED

表示这个window是否启动硬件加速,请求硬件加速但不能保证硬件加速生效。如果仅是用来启动硬件加速,可以在代码中控制,使用下面的代码给指定window启动硬件加速:

Window w = activity.getWindow(); // in Activity's onCreate() for instance

w.setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,

WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

有一件很重要的事需要记住,这个flag需要在Activity和dialog添加view之前来配置。当你在manifest中设置了硬件加速后,这个flag不能用来取消硬件加速。当在Activity标签或者application标签中设置了 hardwareAccelerated = true属性这个flag就自动设置上了

FLAG_LOCAL_FOCUS_MODE

设置flag启用local focus模式(我也不知道local focus mode是什么),在这种模式下window可以不依赖windowmanager独立的控制焦点,使用window的 setLocalFocus(boolean, boolean) 方法即可通常在这种模式下,window不会通过windowmanager获取到touch/key event,但是会通过local injection(我不知道这是什么)得到event,by using injectInputEvent(InputEvent) 方法(貌似是手动的强行向一个window插入一个input event)

FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS

这个flag表示window负责绘制状态栏的北京当设置了这个flag,系统状态栏会变透明,同时这个相应的区域会被填满 getStatusBarColor() and getNavigationBarColor()的颜色

摘抄

1、《WindowManager.LayoutParams的各种flag含义

 历史上的今天

  1. 2023: mediaserver的启动(0条评论)
  2. 2022: [摘]CMakeLists.txt常用语法之常用命令(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

[摘]常见音视频格式

前言本文内容(音视频格式介绍)来源网络,这里我只是整合一下。好记性不如烂笔头正文常见的音频编码格式MP3全称是MPEG Audio Layer3。MP3是利用MPEG Audio Layer 3的技术,将音乐以1:10甚至1:12 的压缩率,压缩成容量较小的file。mp3能够在音质...

周国平:时光村落里的往事

一人分两种,一种人有往事,另一种人没有往事。有往事的人爱生命,对时光流逝无比痛惜,因而怀着一种特别的爱意,把自己所经历的一切珍藏在心灵的谷仓里。世上什么不是往事呢?此刻我所看到、听到、经历到的一切,无不转瞬即逝,成为往事。所以,珍惜往事的人便满怀爱怜地注视一切,注视即将被收割的麦田,正在落叶的...

DialogFragment使用

本想自己总结一下,但发现有网友已经整理,而且还不错。本文摘抄于《Android 必知必会 - DialogFragment 使用总结》背景Android 官方推荐使用 DialogFragment 来代替 Dialog ,可以让它具有更高的可复用性(降低耦合)和更好的便利性(很好的处理...

JNI之数组简单操作

前言简单记录一下JNI中数组操作。正文public class Hello {   static {       System.loadLibrary("Hello");   }   // JNI中对数组排序   public static native int[] so...

Seekbar进度条有黑点问题分析

前言同样的代码,在不同设备上可能存在不同的表现。目前测试在MTK的平台上发现,使用如下代码:<SeekBar   android:id="@+id/play_sb_process"   android:layout_width="754dp"   android:layout...

王小波:肚子里的战争

我年轻时,有一回得了病,住进了医院。当时医院里没有大夫,都是工农兵出身的卫生员——真正的大夫全都下到各队去接受贫下中农再教育去了。话虽如此说,穿着白大褂的,不叫他大夫又能叫什么呢。我入院第一天,大夫来查房,看过我的化验单,又拿听诊器把我上下听了一遍,最后还是开口来问:你得了什么病。原来那张化验单他没...