次のコードを使用して、ユーザー設定ごとに方向ロックを設定しています。
private void doLock(boolean locked) {
if (locked) {
int o = getResources().getConfiguration().orientation;
if (o == Configuration.ORIENTATION_LANDSCAPE)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
else if (o == Configuration.ORIENTATION_PORTRAIT)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}
}
SCREEN_ORIENTATION_SENSOR
ロック解除モード ( ) で画面が正しく表示されている場合 (!) を除いて、機能し、LANDSCAPE
呼び出しdoLock(true)
て...
画面LANDSCAPE
が現在の (正しい) 横向きビューにロックされるのではなく、逆さまの横向きビューにロックされます。つまり、まったく同じですが、垂直方向に反転します (y
になります-y
)。
それはなぜですか? また、この問題を修正するにはどうすればよいですか?
私の最初の調査では、一般的な 2 つ ( 、)以外にも、 を含むかなりの数の可能性があることが明らかになりましたが、この問題はデバイスに依存している可能性があり、それを使用することで、自分の電話の問題のみを修正できる可能性があることがわかりました。ただし、他のすべてのデバイスではありません。portrait
landscape
reverseLandscape
すべてのデバイスでlandscape
(から切り替えたときに)正しい向きを強制する方法はありますか?sensor
これをより明確にし、再現しやすくするために、問題を示す手順を次に示します。
- 画面が正しく表示された状態で ( ) 、ロック解除モード ( ) で、電話機を右 (時計回り) に回転させた状態から始めます (!)。
SCREEN_ORIENTATION_SENSOR
LANDSCAPE
- 次に呼び出す
doLock(true)
- 画面
LANDSCAPE
が現在の (正しい) 横向きビューにロックされるのではなく、逆さまの横向きビューにロックされます。つまり、まったく同じですが、垂直方向に反転します (y
になります-y
)。