アプリケーションの方向(風景またはポートレート)はどのようにロックされていますか?
-
27-09-2019 - |
質問
私は以下を使用してオリエンテーションを凍結しようとしました。
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
ディスプレイはポートレートオリエンテーションにとどまりますが、活動はまだ再現されています。これを解決する方法はありますか?
アプリケーションの方向をどのようにロックして、アクティビティがオリエンテーションの変化で再現されないようにすることができますか?
解決
まず、使用しないでください setRequestedOrientation()
あなたがそれを避けることができるなら。使用 android:screenOrientation
あなたの属性 <activity>
代わりにマニフェスト要素。
第二に、あなたも必要です android:configChanges="keyboardHidden|orientation"
あなたの中で <activity>
破壊/再作成サイクルを防ぐためのマニフェスト要素。
他のヒント
ポートレートオリエンテーションのAndroidManifest.xmlのアクティビティセクションのより具体的な例:
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
どこ android:screenOrientation
初期方向を設定します android:configChanges
画面の変更で対応するライフサイクルメソッドをトリガーするイベントを無効にします。
これを試して:
1.- AndroidManifest.xmlで目的の画面向きを設定します
android:screenOrientation="portrait|landscape"
このように見えるはずです:
<application
android:allowBackup="true"
android:icon="~icon path~"
android:label="~name~"
android:supportsRtl="true"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
</application>
2.- JavaアクティビティファイルのOnCreate void(またはどこでも)にこれを追加します(例: "mainActivity.java"):
super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
このように見えるはずです:
protected void onCreate(Bundle savedInstanceState) {
super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);}
画面の回転がデバイスでオンになっていても、画面が移動しません。
最良の解決策は、保存されたインスタンスを使用することです。画面の向きをロックしている場合、ユーザーが設定した制約に従ってアプリを使用することを強制していることを意味します。したがって、常にonsaveinstancestateを使用してください。このリンクを読む: http://developer.android.com/training/basics/activity-lifecycle/recreating.html