Androidで向きの変更を無効にするにはどうすればいいですか? 質問する

Androidで向きの変更を無効にするにはどうすればいいですか? 質問する

私はポートレートモードで使用したいアプリケーションを持っているので、マニフェストXMLでandroid:screenOrientation="portrait"を定義しました。これは問題なく動作します。HTCマジック携帯電話(他の携帯電話でも向きの変更を防ぎます)。

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

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

ベストアンサー1

2013 年 4 月更新: これはやめてください。2009 年に私が最初にこの質問に答えたときも、これは良い考えではありませんでしたし、今も本当に良い考えではありません。理由については、hackbod によるこの回答を参照してください。

Android で方向変更時に asynctask を使用してアクティビティの再読み込みを回避する

AndroidManifest.xml に追加しますandroid:configChanges="keyboardHidden|orientation"。これにより、システムに、自分で処理する構成変更 (この場合は何もしない) が伝えられます。

<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) 以降では、デバイスの縦向きと横向きを切り替えると、「画面サイズ」も変わります。したがって、API レベル 13 以上 (minSdkVersion 属性と targetSdkVersion 属性で宣言) 向けに開発しているときに、向きの変更によるランタイムの再起動を防ぐには、「orientation」値に加えて「screenSize」値を含める必要があります。つまり、 を宣言する必要がありますandroid:configChanges="orientation|screenSize"。ただし、アプリケーションが API レベル 12 以下を対象としている場合は、アクティビティは常にこの構成変更自体を処理します (Android 3.2 以上のデバイスで実行している場合でも、この構成変更によってアクティビティが再起動されることはありません)。

おすすめ記事