0

実行中のアクティビティに WindowManager を使用してカメラ オーバーレイを追加します。カメラを起動して WindowManager を呼び出すと、WindowManager.LayoutParams に適切な縦向きタグを割り当てたにもかかわらず、画面が縦向きから横向きに変わります。Google経由で解決策を見つけることができませんでした。

サービスのメソッドで実行されている 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 インスタンスが横向きに戻すまで、縦向き (本来あるべき姿) です。はい、マニフェストにポートレート タグがあります。

編集:さらに調査すると、ウィンドウマネージャーは実行中のアクティビティを破棄して再作成しています。これにより、すべてがランドスケープモードに戻ります。アクティビティの onCreate で方向を動的に設定しようとしましたが、それもうまくいきませんでした。上記の windowmanager コードをすべて使用してサービスを停止すると、アクティビティが縦向きモードに戻ります。

4

1 に答える 1

-2
      android:screenOrientation="portrait"
      android:configChanges="orientation|keyboardHidden"

アクティビティの下のマニフェストでこれを定義してみてください。

于 2016-12-02T22:31:39.360 に答える