web-dev-qa-db-ja.com

画面の向きをロックする(Android)

重複している可能性があります:
Androidで向きの変更を無効にする方法は?

私は、異なる内容(アクティビティ)のタブを使うAndroidアプリケーションを書いています。これらの活動の1つでは、画面の向きを「横」モードに固定したいのですが、他の活動では、(センサーによると)通常の向きにしたいです。

私が今やっていることは私が呼んでいるということです。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

横長モードのアクティビティに切り替えたとき

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

他の活動に戻ると。しかし、これではうまくいかないようで、アプリケーション全体が動かなくなります。この問題に対する通常のアプローチは何ですか?

141
user573536

マニフェストでは、screenOrientationをlandscapeに設定できます。 XMLでは、このようになります。

<activity Android:name="MyActivity"
Android:screenOrientation="landscape"
Android:configChanges="keyboardHidden|orientation|screenSize">
...
</activity>

ここでMyActivityはあなたが風景の中にいたいものです。

Android:configChanges=...行は、画面が回転したときにonResume()onPause()が呼び出されるのを防ぎます。この線がなければ、回転はあなたが要求したようにとどまるでしょうが、呼び出しはまだ行われるでしょう。

注:keyboardHiddenおよびorientationは<Android 3.2(APIレベル13)では必須であり、orientationだけでなく、3つのオプションすべてが3.2以上で必要です。

238
Kevin Dion

私は同様の問題を抱えていました。

入ったとき

<activity Android:name="MyActivity" Android:screenOrientation="landscape"></activity>

マニフェストファイルでは、これによってそのアクティビティが横長に表示されていました。しかし、私が以前の活動に戻ったとき、それらはポートレートに設定されていましたが、それらはlanscapeに表示されました。しかし加えることによって

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

ターゲットアクティビティのOnCreateセクションが問題を解決した直後。だから私は今両方の方法を使用します。

57
Alan Cartwright

プロジェクトのAndroidマニフェストファイル内で、向きを修正したいアクティビティ宣言を見つけて、次のコードを追加します。

Android:screenOrientation="landscape"

横向きと縦向きの場合は、次のコードを追加します。

Android:screenOrientation="portrait"
30
HjK