【问题标题】:TYPE_SYSTEM_OVERLAY in ICSICS 中的 TYPE_SYSTEM_OVERLAY
【发布时间】:2012-03-28 05:02:31
【问题描述】:

在 Honeycomb 中,我能够使用 TYPE_SYSTEM_OVERLAY 创建系统覆盖并使用 FLAG_WATCH_OUTSIDE_TOUCH 接收触摸。

现在 ICS 改变了一些东西。我仍然可以创建系统覆盖,但我无法触摸。

现在,我可以使用 TYPE_SYSTEM_ALERT 创建相同的内容并获得触摸,但它只是捕获触摸事件,而不是像在 Honeycomb 中那样传递它们。

有什么想法吗?

亲切的问候

【问题讨论】:

    标签: android android-4.0-ice-cream-sandwich layoutparams android-windowmanager


    【解决方案1】:

    在设置 LayoutParams 时创建覆盖视图 不要将类型设置为TYPE_SYSTEM_OVERLAY

    改为将其设置为TYPE_PHONE

    使用以下标志:

    FLAG_NOT_TOUCH_MODAL

    FLAG_WATCH_OUTSIDE_TOUCH

    FLAG_NOT_TOUCH_MODAL

    【讨论】:

    • 仅供参考,这里有一个适用于 ICS 的完整示例应用程序:jawsware.mobi/code_OverlayView
    • 在 4.2.X 上无法捕获其中任何视图的点击事件,但在较低版本的 Android 上运行良好。有什么建议吗?
    • 谢谢。它对我有用 - 我有“TYPE_SYSTEM_OVERLAY”,我用“FLAG_NOT_TOUCH_MODAL”将其更改为“TYPE_PHONE”,并使用“setOnTouchListener”而不是“setOnClickListener”设置监听器,以便在我的活动上方的弹出窗口以及活动中接收触摸以下。在我的例子中,它是一个带有覆盖窗口的默认系统来电通知。
    • @kosiara,你能阻止主页按钮点击吗?
    • @jawsware,你知道如何防止主页按钮点击吗?
    【解决方案2】:

    你所描述的一切都是真实的。大概是为了加强安全性,因为前一种行为是窃听攻击的来源。我最近写了a blog post 关于这个变化。

    有什么想法吗?

    不要使用其中任何一个。

    【讨论】:

    • 我刚刚发现了一个在 ICS 中仍然可以使用的应用程序 Swipepad。它允许将每个应用程序从预定义的点拖到屏幕中间,然后开始叠加,所以一定有办法
    • @EdwinSchriek:这种行为听起来与TYPE_SYSTEM_ALERT 一致——通过点击系统警报启动的连续触摸事件将传递到该系统警报而不是底层应用程序似乎是合理的。
    • 嗯,我想那是不可能的,但我会继续寻找。谢谢!
    • @Edwin Schriek,你能帮我解决我的问题吗?stackoverflow.com/questions/65405516/…
    猜你喜欢
    • 2012-04-23
    • 2012-07-07
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多