我将带有 WindowManager 的相机叠加层添加到正在运行的 Activity 中。当我启动相机并调用 WindowManager 时,它会将我的屏幕从纵向更改为横向,即使我为 WindowManager.LayoutParams 分配了适当的纵向标签。无法通过谷歌找到任何解决方案。
这是我在服务中的方法中运行的 WindowManager 代码:
inflater = (LayoutInflater) mContext.getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
View view;
view = inflater.inflate(R.layout.camera, null, false);
p = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT);
p.gravity = Gravity.TOP | Gravity.CENTER;
p.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
windowManager.addView(view,p);
布局 R.layout.camera 只是我将相机添加到的 FrameLayout 视图。相机工作正常。我在下面运行的活动是纵向的(应该如此),直到 WindowManager 实例将其转回横向。是的,我的清单中有肖像标签。
编辑:通过进一步调查,窗口管理器正在破坏并重新创建我正在运行的活动,这导致一切恢复为横向模式。我什至尝试在 Activity 的 onCreate 中动态设置方向,但这也不起作用。当我使用上述所有窗口管理器代码停止服务时,我的活动将返回纵向模式。