Android 如何在窗口管理器参数中添加布局、显示、剪切、模式、短边?
我正在创建一个Android应用程序,通过使用服务和窗口管理器在所有应用程序的顶部显示一个浮动视图。我正在尝试将WindowManager.LayoutParams.LAYOUT_添加到我的窗口管理器参数中的_DISPLAY_CUTOUT_MODE_SHORT_边,以使我的布局与显示剪切重叠。但在我的情况下,这似乎不起作用 我已经尝试以两种方式添加它: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
<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);
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);
windowManager.addView(mLayout, params);
通过使用上述方法,我可以在其他应用程序上显示我的视图。但问题是我的视图没有与显示剪切重叠。这是在android处于横向模式时发生的尝试在
活动中设置:
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