Window层级和背景

本文的背景是今天遇到的一个问题:

网易云音乐的锁屏界面隐藏了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_ALERT
WindowManager.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)

猜你喜欢

转载自blog.csdn.net/zlroy1023/article/details/73135574