2

私の Android アプリケーションは、ランドスケープのみになるように設計されています。私は置きました

        android:screenOrientation="landscape"
        android:configChanges="orientation|keyboardHidden|screenSize"

マニフェストに。そして、実際には横向きで起動します。そして、それはクールです。しかし!いくつかの計算を実行するには、デバイスの画面サイズを知る必要があります。そして、次のコードを に追加しましたonCreate():

    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    // utilize size to calculate something...

縦向きからアプリを起動すると、(Google Nexus) size.x = 800, size.y = 1205 が得られます (横向きの場合) size.x = 1280, size.y = 736.

Android が縦向きから横向きに切り替わるまでに時間がかかるようです (最終的には、アプリが "横向き" になっていることがわかります)。しかし、onCreateこのスイッチの前に呼び出されます-そして、それは私の計算を殺します. 私の推測は正しいですか?

計算を から に移動しようとしonCreate()ましonGlobalLayout()たが、次の手順を実行しても縦長のサイズが得られます。

  1. 横向きでアプリを起動
  2. スリープボタンを押す(画面が暗くなる)
  3. 縦向きに回転
  4. スリープ ボタンを押します (ロック解除画面の表示で画面がフェードします)。
  5. デバイスのロックを解除する
  6. 私のアプリは、縦向きのサイズを受信して​​ウェイクアップします
  7. 次の onGlobalLayout() で、ようやくランドスケープ サイズを取得しましたが、手遅れです。

縦向きを完全になくすことはできますか?

4

2 に答える 2

2

私はこの同じ問題に何日も費やしました。他のポスターが明らかにしたように、スリープ/ロック画面から戻ると、アプリはロック画面と同じ縦向きモードに渡されます. 本当の発見は、onResume() と onWindowFocusChanged を 2 回通過することでした。1 回はポートレート モードで、次にランドスケープ モードです。onResume() と onWindowFocusChanged() の両方で次のコードを使用して、画面の初期化を実行する前に確認しました。

int gW = view.getMeasuredWidth();
int gH = view.getMeasuredHeight();
if (gW > gH) {// landscape!
// the height will be set at this point
    // so reinitialize your screen here
}

それは私を助けました。これがお役に立てば幸いです。

于 2013-12-02T01:13:02.593 に答える