1. ホーム
  2. アンドロイド

[解決済み】Androidで向きを変えないようにするにはどうしたらいいですか?

2022-03-31 21:53:25

質問

縦画面で使いたいアプリケーションがあり、そのために android:screenOrientation="portrait" をマニフェストXMLに記述しています。これは HTCマジック の携帯電話 (他の携帯電話でも同様に向きの変更を防ぐことができます) で使用できます。

しかし、私は HTC G1 ハードウェアを開くと QWERTYキーボード (仮想キーボードではありません)。私のアクティビティはポートレートモードのままですが、再起動がかかり、すべての状態が失われるようです。この現象は HTCヒーロー のバージョンです。

私のアプリケーションはかなり大きいので、キーボードを開いたときに再起動し、すべての状態を失いたくないのです。どうすればそれを防ぐことができますか?

解決方法は?

2013年4月更新。これはやめましょう。この質問に最初に答えた2009年当時も、今も、本当に良いアイデアではありません。理由については、hackbodによるこの回答をご覧ください。

アンドロイドの方向変更時にasynctaskでアクティビティを再読み込みしないようにする。

追加 android:configChanges="keyboardHidden|orientation" をAndroidManifest.xmlに追加します。これは、あなたが自分で処理する予定の設定変更(この場合は何もしないこと)をシステムに伝えるものです。

<activity android:name="MainActivity"
     android:screenOrientation="portrait"
     android:configChanges="keyboardHidden|orientation">

デベロッパーリファレンス参照 コンフィグ変更 をご覧ください。

しかし、アプリケーションは電話などでいつでも中断される可能性があるので、一時停止したときにアプリケーションの状態を保存するコードを追加しておく必要があります。

更新する Android 3.2より、"screenSize"も追加する必要があります。

<activity
    android:name="MainActivity"
    android:screenOrientation="portrait"
    android:configChanges="keyboardHidden|orientation|screenSize">

デベロッパーガイドより 自分で設定変更する場合

<ブロッククオート

ご注意ください。Android 3.2(APIレベル13)より、quot;画面サイズ".が表示されるようになりました。 は、デバイスが縦長と横長を切り替えたときにも変化します。 の向きになります。したがって、以下のような理由で実行時に再起動することを防ぎたい場合は APIレベル13以上で開発する場合、オリエンテーションが変化します。 minSdkVersion属性とtargetSdkVersion属性で宣言されています)。 の値に加えて、"screenSize" の値も含める必要があります。 の値を含める必要があります。つまり、次のように宣言する必要があります。 android:configChanges="orientation|screenSize" . ただし アプリケーションは API レベル 12 以下をターゲットにしているので、アクティビティは常に はこの設定変更自体を処理します(この設定変更は は、Android 3.2以降で動作している場合でも、アクティビティを再起動させません。 以上のデバイス)。