【问题标题】:Android : Place non-clickable view above all application windows but below notification barAndroid:在所有应用程序窗口上方但在通知栏下方放置不可点击的视图
【发布时间】:2016-09-22 00:38:50
【问题描述】:

抱歉,标题太长了。我基本上想添加一个 SurfaceView 作为出现在所有窗口上方但不在通知栏上方的窗口(即使向下拖动)。我目前拥有的代码是:

WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                PixelFormat.TRANSLUCENT);

除了将视图放在通知栏上方之外,这非常有效。如果我改为使用 TYPE_SYSTEM_ALERT,我可以实现所需的 Z 顺序,但是我的应用程序将不会响应用户输入。然后我添加了标志 FLAG_NOT_TOUCHABLE,它允许用户根据需要与应用程序组件进行交互。但是,然后手机上的返回键和任务管理器键没有反应。

有没有办法实现我正在寻找的行为?我希望我说得足够清楚,用语言来描述我想要什么有点困难。谢谢!

【问题讨论】:

    标签: java android android-windowmanager z-order


    【解决方案1】:

    解决了!

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
                    WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH |
                            WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
                            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
                            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
                            WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
                    PixelFormat.TRANSLUCENT);
    

    TYPE_SYSTEM_ALERT 确保系统通知栏保持在我的视图上方。 FLAG_NOT_TOUCH_MODAL 允许将触摸事件发送到视图后面的窗口;和FLAG_NOT_TOUCHABLEFLAG_NOT_FOCUSABLE 确保视图不会收到触摸或按键事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 2013-05-20
      相关资源
      最近更新 更多