1

設定によってポートレートモードでのみ表示するように設定したアプリがあります

android:screenOrientation="portrait"

マニフェスト内の各アクティビティに対して。これは正常に機能し、電話を回転させてもアプリ画面が回転しません。

問題は、電話を縦向きにしてアプリを起動すると、最初のアクティビティが実行され (アニメーション化されたスプラッシュ画面)、次のアクティビティが起動されたときに、最初のアクティビティがまだ実行されている間に電話を横向きに回転させることです (最初のアクティビティのスレッドの finally ブロックから起動されます)、アプリは終了します。強制終了ではなく、ホーム画面に戻るだけです。LogCat には、例外がスローされたり、これが発生した理由を示すものはありません。画面が回転することはありません (そうあるべきではありません)。横向きの電話でアプリを起動すると、正常に動作します。これは、ポートレートで開始し、後でランドスケープに回転した場合にのみ発生します。

入れてみました

android:configChanges="orientation"

すべての活動で、私も試しました

android:configChanges="orientation|keyboard|keyboardHidden|screenLayout"

アクティビティに onConfigurationChanged を実装して、または実装せずに上記を試しました。私がそれを実装したとき、私は単にそれを無視しました(super.onConfigurationChangedを呼び出すだけです)。

マニフェストに設定するだけでなく、アクティビティをプログラムで縦向きに設定しようとしました。

元の Motorola Droid でも、物理キーボードを開いた状態でアプリを起動し、カー ドックでアプリを起動することで、これを実現できます。アプリが起動し、スプラッシュ スクリーンが縦向きで起動しますが (キーボードが開いているか、電話がカー ドックにある場合でも)、その 2 番目のアクティビティが開始されるとすぐにアプリが終了します。

これは、方向の変更でアクティビティが破棄されることとは関係がないと思います。すべてのグローバル データはアプリのカスタム Application クラスに格納され、前述のように、グローバルが消去された場合に null ポインターなどの例外は発生しません。

Android 2.3.2 を搭載した Verizon で Motorola Droid オリジナルを実行しています。

4

2 に答える 2

0

プログラムでスプラッシュ画面または次のアクティビティ内の方向を設定することをお勧めします。このコードを実装してみてください:

//get the WindowManager Service
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
//get the orientation
int orientation = display.getOrientation();
//orientation % 2 == 0 is portrait mode,
if ((orientation % 2) != 0) (android.view.IWindowManager.Stub.asInterface(ServiceManager.getService("window"))).setOrientation(0);

これがうまくいくことを願っています。

于 2011-03-01T00:11:01.127 に答える
0

res フォルダー内の特定のリソースを提供する必要があるため、向きが変わるとアプリケーションが終了します。

  • 例: res フォルダー内の layout-landまたは

プログラムによって実行時に変更を処理する

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}
于 2013-03-18T07:28:55.247 に答える