2017-04-16 103 views
3

我看到我可以在锁屏上显示。但我希望它可以选择。目前我使用这些PARAMS来实现这一目标:如何以编程方式更改WindowManager.LayoutParams的类型?

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT, 
WindowManager.LayoutParams.WRAP_CONTENT, 
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR, 
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | 
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | 
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, PixelFormat.TRANSPARENT); 

而且,不显示在锁定屏幕上它,我用

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT, 
WindowManager.LayoutParams.WRAP_CONTENT, 
WindowManager.LayoutParams.TYPE_PHONE, 
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | 
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | 
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, PixelFormat.TRANSPARENT); 

另外他们的工作很好,但我想改变的类型和标志编程。所以,我想用

params.flags &= ~WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; 
params.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; 
params.flags |= WindowManager.LayoutParams.TYPE_PHONE; 
windowManager.updateViewLayout(myView,params); 

改变WindowManager.LayoutParams去除类型,删除标志,并设置一个新的类型, 但似乎并没有工作。有谁知道如何正确地做到这一点?

回答

2

您在设置type值为flag。试试这个:

params.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; 

// type is no bit flag, so this should do it 
params.type = WindowManager.LayoutParams.TYPE_PHONE; 
+0

我怎么错过'type'属性?谢谢! – Denny