2015-09-16 31 views
1

我試圖改變屏幕的方向基於按下按鈕以及聆聽傳感器的配置更改。setRequestedOrientation(...)阻止傳感器配置更改

我的代碼如下所示:

private boolean mFullScreen = false; 
... 

/** 
* This method is used by button to toggle orientation 
*/ 
public void toggleFullScreen() { 
    mFullScreen = !mFullScreen; 
    switchFullScreen(); 
} 

private void switchFullScreen() { 
    if (mFullScreen) { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); 
    } else { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); 
    } 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    switch (newConfig.orientation) { 
     case Configuration.ORIENTATION_LANDSCAPE: { 
      getSupportActionBar().hide(); 
      getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
      break; 
     } 
     case Configuration.ORIENTATION_PORTRAIT: { 
      getSupportActionBar().show(); 
      getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
      break; 
     } 
    } 
} 

而且在清單:

<activity 
    android:name="Activity" 
    android:configChanges="screenSize|orientation /> 

首先檢測到來自傳感器的配置更改,但一旦取向從按鈕切換,未檢測。

回答

0

僅限於ActivityInfo.SCREEN_ORIENTATION_SENSORActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR您的活動將對傳感器產生反應。屏幕方向設置爲縱向或橫向塊旋轉,這是他們的主要目的

+1

其實我是想獲得玩家一樣,YouTube上,其中兩個傳感器和按鈕可以用來改變方向。 – Samir

0

你可以做這樣的事情:

private void switchFullScreen() { 
    if (mFullScreen) { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); 
    } else { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); 
    } 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
}