2012-05-31 53 views
12

在我的清單中,我設置了一個限制爲縱向方向的活動。但是我需要在條件下解除這個限制。那麼,如何以編程方式實現刪除方向限制?以編程方式移除方向限制

UPD:我目前的設置是:

<activity 
     android:name=".activity.MainActivity" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.NoTitleBar" 
     android:screenOrientation="portrait" 
     android:configChanges="orientation"> 


/** 
* Defines whether the device being used is a tablet and if so adds horizontal orientation option. 
*/ 
    protected void _updateScreenOrientationModes(){ 
     if(((MyApplication) getApplication())._isTablet == true) 
       setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
     } 

回答

18

無論你是否已經在你的清單中設置android:screenOrientation,您可以通過編程設定的定向Activity.setRequestedOrientation()

在本質上,「去除限制」是由

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 

完成之後,活動將表現出改變屏幕取向物理設備取向的變化時的默認行爲。

但是,您可能想要同時匹配當前的物理設備方向。我還沒有嘗試過,但是我非常確定,如果您所做的只是上述內容,如果設備實際上處於橫向方向,那麼您將保持縱向模式,直到您實際移動設備肖像和回到風景。

我會做的是確保在您的清單中設置android:configChanges="orientation"並覆蓋Activity.onConfigurationChanged(),根據您的情況,您可以根據自己的情況執行方向更改或緩存方向。然後,無論何時您的狀況發生變化,您都可以方便地使用當前的身體方位,以便在必要時可以在此時對其進行更改。

+0

我已經考慮過了:)。但是使用未知的方法不起作用。 – user1384991

+0

這絕對適用於我在很多設備上。你確定你實際上正在調用setRequestedOrientation()嗎? –

+0

好吧,它工作 - 謝謝 – user1384991

1

編程您可以通過使用「setRequestedOrientation()」更改屏幕方位按需要你的病情

在Java類編寫如下代碼。 ....

要切換到肖像模式,使用ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE常數:

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

要切換到肖像模式,使用ActivityInfo.SCREEN_ORIENTATION_PORTRAIT常數:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
+0

我的意思是刪除限制以允許Android決定應該使用哪個方向,所以如果我有一個在Manifest中定義的肖像,但我需要刪除這個限制 - 不清楚應該設置哪個參數方向 - 用戶可能是我如何定義使用哪種設備?我需要允許平板電腦同時具有兩種方向和手機肖像。關於您的答案 - 當平板電腦用戶啓動應用程序時,如何定義他的* *保持**方向並將佈局設置爲合適的? – user1384991

+0

此外,恐怕這種方法不允許兩個方向,因爲它限制了一個特定的方向。我已經嘗試到目前爲止SCREEN_ORIENTATION_UNSPECIFIED,但徒勞 – user1384991

+1

以下SCREEN-ORIENTATION - 未完成的作品,我用它。如果您在您的清單中指定了此未調用,則默認情況下它將以縱向模式顯示。 –

2

我打算留下我的其他答案,因爲它解決了您提出的更一般的問題。然而,在給別人評論你說:

我需要讓平板電腦有兩個方向和手機只肖像

你的具體情況實際上比一般情況下更容易:卸下兩個android:screenOrientation="portrait"並從您的清單android:configChanges="orientation"允許默認行爲。然後,在啓動過程中,如果該設備是手機,強制縱向與

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

的設備顯然絕不是一個平板電腦或運行時手機之間變化,所以你只需要做一次,在啓動時。平板電腦將獲得默認行爲,因此無論設備的物理方向如何,這就是他們將要使用的。手機將被迫成爲肖像,並保持這種狀態。