【问题标题】:How to change the WindowManager.LayoutParams' type programmatically?如何以编程方式更改 WindowManager.LayoutParams 的类型?
【发布时间】:2017-04-16 00:38:22
【问题描述】:

我得到了一个可以在锁屏上显示的视图。但我想让它成为可选的。目前我使用这些参数来实现这一点:

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);

它们分别工作正常,但我想以编程方式更改类型和标志。所以我尝试用

更改 WindowManager.LayoutParams
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);

要删除类型,删除标志并设置新类型, 但这似乎不起作用。有谁知道如何正确执行此操作?

【问题讨论】:

    标签: android lockscreen android-windowmanager


    【解决方案1】:

    您正在将 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;
    

    【讨论】:

    • 我怎么会错过type 属性?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 2011-12-27
    • 2023-04-10
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 2022-10-30
    相关资源
    最近更新 更多