You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中getWindow().setFlags的flags与mask参数作用是什么

安卓Window.setFlags方法flags与mask参数详解

参数核心含义

setFlags方法本质是对Window的布局参数标记位做批量修改,底层通过位运算实现,两个参数都为int类型的位标记集合:

  • flags参数:你想要最终设置的目标标记位集合。所有你希望生效的窗口属性标记(比如FLAG_FULLSCREEN、FLAG_KEEP_SCREEN_ON等)都可以通过按位或(|)拼接后放到这个参数里。
  • mask参数:修改操作的作用范围标记位集合。它用来指定哪些标记位需要被修改,不在mask范围内的标记位会保持原有状态,完全不受本次调用影响。

二者的作用与运算逻辑

底层实际修改标记位的逻辑对应这行位运算:

windowAttributes.flags = (windowAttributes.flags & ~mask) | (flags & mask);

拆解逻辑:

  1. 先把原有标记位中属于mask范围内的位全部清零:(windowAttributes.flags & ~mask)
  2. 再把flags参数里属于mask范围内的位赋值过去:(flags & mask)
  3. 两部分合并就是修改后的最终标记位。

回到你提到的隐藏状态栏的代码示例:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

这个调用里flags和mask传了同一个值,意思就是:仅修改FLAG_FULLSCREEN这一个标记位,将其设置为生效状态,其他所有窗口标记位保持不变。

如果要同时设置全屏和屏幕常亮两个属性,可以这么写:

int targetFlags = WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
getWindow().setFlags(targetFlags, targetFlags);

如果要取消全屏,不修改其他属性,可以这么写:

getWindow().setFlags(0, WindowManager.LayoutParams.FLAG_FULLSCREEN);

这里mask指定仅修改全屏标记位,flags对应位的值为0,因此会把全屏标记位清零。

内容的提问来源于stack exchange,提问作者MD Jahid Hasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:45:03