2017-02-12 32 views
1

在我的android應用程序中,我有一個在縱向和橫向模式下都有的活動。下面是它是如何做:如何僅在啓用Android時更改方向?

在我的清單中,爲活動我已經設置

android:configChanges="orientation|screenSize|locale"

onConfigurationChanged方法在我的活動

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     //handling the change 
} 

的問題是,即使我的手機屏幕旋轉禁用,當我打開它時,應用程序切換到橫向模式。我如何告訴它聽設備屏幕模式?

回答

0

我想你可能會嘗試

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

在您的清單,您已報名聽配置的變化。但是如果你不想要橫向模式,你可以嘗試上面的代碼行。

我認爲,以下將滿足您的要求。

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Log.d(TAG, "Landscape"); 
     if (allowPortraitOnly) { 
      Log.d(TAG, "portrait only is allowed, changing to portrait"); 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     } 

    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     Log.d(TAG, "Portrait"); 
    } 
} 

我們主要在運行時檢查設備方向。設置中啓用了自動旋轉功能。 例如,我們只想用縱向模式限制設備。使用布爾變量(或其他類似共享首選項)allowPortraitOnly ='true'值,我們執行此操作。 當設備更改爲橫向模式時,我們調用onConfigurationChanged()並手動將設備更改爲縱向模式。

請注意,您必須在清單中包含以下內容。

android:configChanges="orientation|screenSize" 
+0

我希望橫向模式,但只有當用戶允許它時 – Carmine

0

你需要

android:screenOrientation="nosensor" 
android:configChanges="keyboardHidden|orientation" 

在您的清單: 然後覆蓋onConfigurationChanged()

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
//here you can handle orientation change 
} 

那麼這行添加到您的活動的onCreate()

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

由@Jose回答。

還記得使用android:screenOrientation="nosensor"這個,你將無法處理方位的變化。

+0

但是OP確實想要處理方向更改。 –