如何在 Window Manager 参数中添加 LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES?
How to add LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES in Window Manager Params?
我正在创建一个 Android 应用程序,我在其中使用服务和 Window 管理器在所有应用程序顶部显示浮动视图。我正在尝试在我的 Window 管理器参数中添加 WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES 以使我的布局能够覆盖显示切口。但在我的情况下这似乎不起作用。
两种方式我都试过了:
通过使用 XML 样式:
<style name="OverlayTheme">
<item name="android:windowLayoutInDisplayCutoutMode">
shortEdges <!-- default, shortEdges, never -->
</item>
</style>
并在我的布局根视图中添加了这种样式。
但是不行。
通过在我的服务中使用 JAVA 代码:
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() 方法中初始化 Window 管理器和布局:
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (inflater != null) mLayout = inflater.inflate(R.layout.my_layout, null, false);
将此视图添加到 window 由 Window 经理:
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 方法将此视图添加到 Window:
windowManager.addView(mLayout, params);
通过使用上述方法,我可以在其他应用程序之上显示我的视图。但问题是我的观点并没有与显示切口重叠。当 android 处于横向模式时会发生这种情况。
解法:
我通过添加这行代码解决了这个问题(如 Answere 中所建议的):
params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
尝试在 Activity
中设置:
window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
我正在创建一个 Android 应用程序,我在其中使用服务和 Window 管理器在所有应用程序顶部显示浮动视图。我正在尝试在我的 Window 管理器参数中添加 WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES 以使我的布局能够覆盖显示切口。但在我的情况下这似乎不起作用。
两种方式我都试过了:
通过使用 XML 样式:
<style name="OverlayTheme"> <item name="android:windowLayoutInDisplayCutoutMode"> shortEdges <!-- default, shortEdges, never --> </item> </style>
并在我的布局根视图中添加了这种样式。 但是不行。
通过在我的服务中使用 JAVA 代码:
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() 方法中初始化 Window 管理器和布局:
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (inflater != null) mLayout = inflater.inflate(R.layout.my_layout, null, false);
将此视图添加到 window 由 Window 经理:
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 方法将此视图添加到 Window:
windowManager.addView(mLayout, params);
通过使用上述方法,我可以在其他应用程序之上显示我的视图。但问题是我的观点并没有与显示切口重叠。当 android 处于横向模式时会发生这种情况。
解法:
我通过添加这行代码解决了这个问题(如 Answere 中所建议的):
params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
尝试在 Activity
中设置:
window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES