2011-08-21 5 views
5

私はアクティビティを持っています。このアクティビティはポートレートモードまたはランドスケープモードで動作します。ランドスケープモードでは、新しいレイアウトをロードしてグラフを表示します。 が向きを検出するために、私は私のマニフェストにこれを設定:それは完璧に動作オリエンテーションを無効にしますがオリエンテーションを検出します

android:screenOrientation="sensor" android:configChanges="orientation" 

、私は自分の携帯電話を反転するときので、新しいレイアウトがロードされています。しかし、lanscapeモードでは、ボタンを使って回転を無効/有効にすることができます(スイッチャーです)。

私はこのコードを書いた:

public void onConfigurationChanged(Configuration pNewConfig) { 
    Log.v(DEBUG_TAG, "Current configuration changes"); 

    if (pNewConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Log.v(DEBUG_TAG, "Screen orientation : LANDSCAPE"); 
     if (pNewConfig.orientation != mCurrentOrientation) { 
      initTestLandscape(); 
      mCurrentOrientation = pNewConfig.orientation; 
     } 
    } else { 
     Log.v(DEBUG_TAG, "Screen orientation : PORTRAIT"); 
     if (!mIsLandscapeLocking 
       && pNewConfig.orientation != mCurrentOrientation) { 
      initTestPortrait(); 
      mCurrentOrientation = pNewConfig.orientation; 
     } 
    } 
    super.onConfigurationChanged(pNewConfig); 
} 

このコードは動作しますが、ユーザーはランドスケープモードで、ポートレートモードでバックアップする携帯電話を反転させ、ロックがオンのとき、lanscapeレイアウトはポートレートモードで反転します私はそれを望んでいない!

私は

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

を追加しましたが、このコードはonConfigurationChanged方法を無効にし、ユーザーが再び電話を反転させた場合、私は検出できない...

あなたは私を助けることができますか?

+4

である必要があり、変更後の

android:configChanges="orientation|screenSize|keyboard|keyboardHidden" 

を...私は(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)setRequestedOrientationを呼び出します。ユーザーがビューをロックしてsetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR)を呼び出すと、ユーザーがロックを解除すると...簡単ですが、どうすればこの解決策は考えられませんか?不都合な点についてお詫び申し上げます。 – FinalSpirit

+0

注目すべき点は、自分のために提供したソリューションは、ビューが左側ではなく右側に回転している間にユーザーがロックしても、奇妙な動作をするということです。片側だけを意味する 'SCREEN_ORIENTATION_LANDSCAPE'にロックしているので、ビューは逆さまになります。あなたはそれを横向きに保持する 'SCREEN_ORIENTATION_SENSOR_LANDSCAPE'を望んでいるかもしれませんが、ユーザが電話機/タブレットの反対側に切り替えると、デバイスからセンサを聞きます。 – SDJMcHattie

+0

はい、SCREEN_ORIENTATION_LANDSCAPEの代わりにSCREEN_ORIENTATION_SENSOR_LANDSCAPEを使用する必要がありますが、このトピックを投稿すると、私はSCREEN_ORIENTATION_SENSOR_LANDSCAPEをサポートしていないAndroid 8にありました – FinalSpirit

答えて

0

アンドロイドを変更します:configChanges: - あなたは、コードそれは非常に簡単です仕事

関連する問題