本文的背景是今天遇到的一个问题:
网易云音乐的锁屏界面隐藏了SystemUI的锁屏界面,然而在设置密码锁的情况下,滑动网易云音乐的锁屏界面,可以看到锁屏界面之下的内容。
最初想到的办法就是给SystemUI的锁屏界面加上个黑色背景
这个方案最后在SystemUI的StatusBarWindowManager中实现了
只要在setKeyguardOccluded()中添加判断条件和这一句
mLp.flags |= WindowManager.LayoutParams.FLAG_DIM_BEHIND;
就能把这个Window的背景设为黑色
还能用dimAmount调整透明度
mLpChanged.dimAmount = 1.0f;
(http://blog.csdn.net/ooo4561213/article/details/6654961)
除了背景设为黑色,还能把自己的View设为透明,用WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER把Window的背景设为系统壁纸
(http://blog.csdn.net/yao_guet/article/details/6572739)
去掉这个flag,可以用这个运算
mLp.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
然而这之后,我发现网易云音乐的锁屏界面被黑色给遮住了。。。
原来,SystemUI的Window始终在网易的Window之上。
这里就涉及Window的层级,以前做悬浮窗的时候接触过一些
WindowManager.LayoutParams.TYPE_SYSTEM_ALERTWindowManager.LayoutParams.TYPE_TOAST
这些可以设置window的层级
(Window的分类:http://blog.csdn.net/yhaolpz/article/details/68936932)
至于观察Window List,查看实时的Window排布,可以用Hierarchy Viewer
(https://stackoverflow.com/questions/9451755/what-is-an-android-window)