Android 如何在窗口管理器参数中添加布局、显示、剪切、模式、短边?

Android 如何在窗口管理器参数中添加布局、显示、剪切、模式、短边?,android,android-layout,android-service,android-windowmanager,display-cutouts,Android,Android Layout,Android Service,Android Windowmanager,Display Cutouts,我正在创建一个Android应用程序,通过使用服务和窗口管理器在所有应用程序的顶部显示一个浮动视图。我正在尝试将WindowManager.LayoutParams.LAYOUT_添加到我的窗口管理器参数中的_DISPLAY_CUTOUT_MODE_SHORT_边,以使我的布局与显示剪切重叠。但在我的情况下,这似乎不起作用 我已经尝试以两种方式添加它: 通过使用XML样式: <style name="OverlayTheme"> <item name="android:wi

我正在创建一个Android应用程序,通过使用服务和窗口管理器在所有应用程序的顶部显示一个浮动视图。我正在尝试将WindowManager.LayoutParams.LAYOUT_添加到我的窗口管理器参数中的_DISPLAY_CUTOUT_MODE_SHORT_边,以使我的布局与显示剪切重叠。但在我的情况下,这似乎不起作用

我已经尝试以两种方式添加它:

  • 通过使用XML样式:

    <style name="OverlayTheme">
      <item name="android:windowLayoutInDisplayCutoutMode">
        shortEdges <!-- default, shortEdges, never -->
      </item>
    </style>
    
    它也不起作用。我不确定是否正确应用了布局参数。请帮我解决这个问题。提前谢谢

  • 编辑:

    这就是我在我的服务中实现泡沫的方式:

    params = new WindowManager.LayoutParams(
                        WindowManager.LayoutParams.MATCH_PARENT,
                        WindowManager.LayoutParams.MATCH_PARENT,
                        WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
                        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                                | WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
                                | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
                        PixelFormat.TRANSLUCENT);
    
  • 已在onCreate()方法中初始化窗口管理器和布局:

  • 已将此视图按窗口管理器添加到窗口:

    WindowManager.LayoutParams params;
    params = new WindowManager.LayoutParams(
                        WindowManager.LayoutParams.MATCH_PARENT,
                        WindowManager.LayoutParams.MATCH_PARENT,
                        WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
                        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                                | WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
                                | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
                        PixelFormat.TRANSLUCENT);
    
  • 最后通过addView方法将此视图添加到窗口:

    windowManager.addView(mLayout, params);
    
    通过使用上述方法,我可以在其他应用程序上显示我的视图。但问题是我的视图没有与显示剪切重叠。这是在android处于横向模式时发生的

  • 解决方案:

    我通过添加这行代码(如Answare中所建议的)解决了这个问题:


    尝试在
    活动中设置:

    window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
    

    谢谢你的回复。但我目前正在服务中,没有任何活动,我正在使用WindowManager.LayoutParams参数和WindowManager.addView(mLayout,params)将我的视图设置在其他应用程序之上(如气泡);方法。我已经更新了我问题中的方法,以便您更好地理解。因为我没有窗口变量的引用,所以不能像这样实现它。如果我在什么地方错了,请告诉我……非常感谢。我通过设置params.layoutInDisplayCutoutMode=WindowManager.LayoutParams.LAYOUT_在_DISPLAY_CUTOUT_MODE_SHORT_EDGES中实现了这一点;正如你建议的那样,它起了作用。
         params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
    
    window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES