0

デバイス(アクティビティではない) の向きを 4 つの値 (LANDSCAPE、PORTRAIT、LANDSCAPE_REVERTED、PORTRAIT_REVERTED)にキャストする必要があるタスクがあります。私は解決策を思いつきましたが、それは固定値を使用しており、アクティビティの向きをいつ、どのように変更するかという Android の機能を表していません。

デバイスの向きが指定された 4 つの値に変更されたときに、リスナーに簡単に通知できる API を見つけることができませんでした。

Androidが方向を計算し、アクティビティの方向を変更するようにWindowManagerに通知する方法の機能を誰かが共有できれば幸いです。

【解決済み】 自分と同じような目に遭うかもしれない人へ。 フレームワーク/ベース/コア/Java/アンドロイド/ビュー/WindowOrientationListener.java

このリスナーには、方向を変更するようにアクティビティに通知するすべての魔法が含まれています。

4

5 に答える 5

1

onConfigChanges() では、画面の向きが変わるたびに常に通知され、次のようにいつでも画面の向きを取得できます。

Display getOrient = getWindowManager().getDefaultDisplay();
switch(orientation){
case Configuration.ORIENTATION_LANDSCAPE:
Log.e();
break;
case Configuration.ORIENTATION_PORTRAIT:
Log.e();
break;
}
于 2013-03-01T11:07:07.930 に答える
0

プロジェクトマニフェストでscreenOrientationを使用して、方向を設定します。

<activity
            android:name=".SplashScreen"
            android:screenOrientation="portrait"
</activity>
于 2013-03-01T11:03:11.947 に答える
0

横向きモードでアクティビティを表示して配置する場合は、ドローアブル、つまり layout-landscape にフォルダーを追加します。アプリを縦向きモードでのみ実行する場合は、マニフェストで次のように宣言します。

android:screenOrientation="portrait"

または横向きモードでしたい:

 android:screenOrientation="landscape"
于 2013-03-01T11:05:53.100 に答える
0

OSがデバイスの回転を計算し、回転角度が60度変化すると向きが変わると確信しています。したがって、デバイスが縦向きで回転角度が 0 の場合、デバイスを反時計回りに回転させると回転角度が大きくなり、回転角度が約 60 度になると、OS は横向きに変わります。ここで、デバイスを時計回りに回転させたときにデバイスが横向きであると仮定すると、角度が減少し、約 30 度で OS が縦向きに変わります。

姿勢変更状態
左側が現在の姿勢です。
右側は、デバイスを回転させたときの新しい向きです。
Portrait ---> 横 回転左回転角度 > 60
Portrait ---> Landscape_Reverse 回転右回転角度 < -60
Landscape ---> 縦回転右回転角度 < 30
Landscape ---> Portrait_Reverse回転左回転角度 > 150
Landscape_Reverse ---> 縦向きの回転の反時計回りの回転角度 > -30
Landscape_Reverse ---> Portrait_Reverseの回転の時計回りの回転角度 < -150

デバイスが平らに置かれている場合、回転角度は計算できません。これが、デバイスが平らに置かれているときにアプリを起動してデバイスを回転させても、向きの変化が発生しない理由です。Android で加速度計を使用して XY 平面で電話の傾きを測定する方法
の私の回答で、回転角度がどのように計算されるかを確認できます。

于 2013-03-01T11:27:36.553 に答える
0

getRotation()を使用する

Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();

ドキュメントから

画面の「自然な」方向からの回転を返します。返される値は、Surface.ROTATION_0 (回転なし)、Surface.ROTATION_90、Surface.ROTATION_180、または Surface.ROTATION_270 です。たとえば、デバイスの画面が自然に縦長で、ユーザーが画面を横向きにするために画面を横向きにした場合、ここで返される値は、画面が回転した方向に応じて、Surface.ROTATION_90 または Surface.ROTATION_270 のいずれかになります。角度は、画面上に描画されたグラフィックスの回転であり、デバイスの物理的な回転の反対方向です。たとえば、デバイスが反時計回りに 90 度回転した場合、これを補正するためにレンダリングが時計回りに 90 度回転されるため、ここで返される値は Surface.ROTATION_90 になります。

于 2013-03-01T11:32:22.900 に答える