2011-08-21 46 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

這是非常簡單的。我叫setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);當用戶鎖定視圖並調用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR)時;當用戶解鎖...這很容易,我怎麼沒有想到這個解決方案?不便之處,敬請諒解。 (我無法回答我的問題) – FinalSpirit

+0

值得注意的是,如果用戶在視圖旋轉到右側而不是左側時鎖定了自己的解決方案,那麼該解決方案仍然會出現異常。該視圖會翻轉,因爲您正在鎖定「SCREEN_ORIENTATION_LANDSCAPE」,這隻意味着一方面。您可能需要'SCREEN_ORIENTATION_SENSOR_LANDSCAPE'將其保持在橫向模式中,但如果用戶切換到手機/平板電腦的另一側,它仍會監聽設備中的傳感器。 – SDJMcHattie

+0

是的,您必須使用SCREEN_ORIENTATION_SENSOR_LANDSCAPE來代替SCREEN_ORIENTATION_LANDSCAPE,但是當我發佈此主題時,我在Android 8上不支持SCREEN_ORIENTATION_SENSOR_LANDSCAPE – FinalSpirit

回答

0

使Android的變化:configChanges: -

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

更改後,你的代碼應該是工作