0

状況は次のとおりです。

向きの変更中にコンテンツを変更する単純なアクティビティがあります。

ボタンのクリックに応答して、反対の向き (横 -> 縦、縦 -> 横) を強制し、その後も向きの変更を処理する機能が必要です。

具体的な例で自分自身を説明しようとします(これを達成したいです)-

デバイスが縦向きモードであるとしましょう - >アクティビティは縦向きモードで開始されます。
ここで、ユーザーが何らかのボタンをクリックすると、それに応じてアクティビティが強制的に横向きモードになります。
ここで、ユーザーはデバイスを横向きモードに回転させますが、アクティビティは横向きモードに強制されているため、アクティビティには何も起こりません。
ここで、ユーザーがデバイスを縦向きモードに戻すと、アクティビティは再び縦向きモードになります。

だから、ここに私が向きを強制する方法があります:

public void onButtonClick()
{
    if (mLastOrientation == Configuration.ORIENTATION_LANDSCAPE)
    {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
    }

    else
    {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    }
}

そして、向きの変更の処理は次のとおりです。

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

    int currentOrientation = newConfig.orientation;

    //
    // Some UI changes according to orientation .............
    //

    mLastOrientation = currentOrientation;


    // Here's where I'm allowing device orientation changes again
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}

問題は、setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) を呼び出しているときに、アクティビティが現在のデバイスの向きに戻っていることです。これにより、強制的な向きが正しく機能しなくなります。

これを解決する方法はありますか?

前もって感謝します!

4

1 に答える 1

0

ボタンがクリックされるonConfigurationChanged()たびに呼び出される可能性があるため、構成を変更するため、横向きまたは縦向きに設定しても未指定に戻ります! または何かを入れてみてくださいsetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);onCreate()それで問題は解決すると思いますか?

ボタンがクリックされました --> 向きが変更されました。構成が変更されたことを意味します --> トリガーonConfigurationChanged()--> 再度変更しUNSPECIFIEDます。

これを入れるonCreate()と、アプリの起動時に一度だけ発生します。

于 2013-09-22T20:00:51.080 に答える