0

アクティビティの向きを変更できるようにボタンクリックを実装しようとしていますが、横向きモードになりますが、縦向きには戻りません。

if(!state){
    setRequestedOrientation(MainActivity.SCREEN_ORIENTATION_LANDSCAPE);
}
else {
    setRequestedOrientation(MainActivity.SCREEN_ORIENTATION_PORTRAIT);
}
state = !state;

私が読んだのは、ボタンが押されたときにstate = falseを持ち、向きを変更してから状態をtrueに設定することでした。この時点でボタンをもう一度押すと、アクティビティは横向きに戻ります。

スイッチの使用についても読みましたか?しかし、それを実装しようとしましたが、うまくいかなかったので、この方法を試しました。

編集

表面の回転を取得して実装しましたが、0 または 90 のいずれかの回転を取得できます。

if (orientation==Surface.ROTATION_0)
{
    Toast.makeText(getBaseContext(), "going to landscape", Toast.LENGTH_LONG).show();
    setRequestedOrientation(MainActivity.SCREEN_ORIENTATION_LANDSCAPE);
}
else if (orientation==Surface.ROTATION_90)
{
    Toast.makeText(getBaseContext(), "going to portrait", Toast.LENGTH_LONG).show();
    setRequestedOrientation(MainActivity.SCREEN_ORIENTATION_PORTRAIT);
}

ただし、アクティビティが横向きになり、トーストが表示されると、縦向きに戻ろうとすると、トーストは「縦向きになります」と表示されますが、setRequestOrientation は実行されません。問題は何ですか?

4

1 に答える 1

0

アクティビティがローテーションされると、破棄されて再作成されます。これが発生すると、「状態」の値が失われます。これにより、常に元のオプションに戻されるため、他のオプションをヒットすることはありません。

onSaveInstanceState() HEREを見てください。

その後、 onCreate() メソッドでバンドルにアクセスして、値を取得できます。

于 2013-08-15T10:13:05.067 に答える