2012-10-03 8 views
28

我的應用程序需要在縱向模式下,所以我把它的表現是:設置方向只有1片段在我的活動,而其餘的是在縱向

android:screenOrientation="portrait" 

但我剛剛加入另一個片段(FragA),它的外觀和功能在橫向上都能提高10倍。有什麼我可以放在我的FragA裏面,只是在橫向上製作片段,同時保留縱向應用的其餘部分,或者通過這樣做,我不得不添加一些東西到我的其他片段,以保留它們作爲肖像?

回答

11

方向屬性是針對每個活動的,因此您可以僅爲包含片段的活動聲明方向,以使其處於橫向狀態,其餘活動將保持原樣。

+0

所以基本上我最好的選擇是隻創建另一個活動,然後在我的清單只是把那爲:機器人:screenOrientation =「風景」? –

+0

是的,這將確保您的功能永遠不會失敗。 –

+0

@DineshVenkata但我不想旋轉片段而不是活動做什麼 – PriyankaChauhan

74

在您想要特定(在此情況下是縱向)方向的片段中使用以下代碼行。

getActivity().setRequestedOrientation(
      ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

如果您希望在片段中有一個方向,即基於用戶握住他的設備的方式,請使用以下代碼行。

getActivity().setRequestedOrientation(
       ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 

希望,這會給你預期的解決方案。

+0

我在片段事務提交之前在活動代碼中使用了此代碼。在片段onAttach()/ onStop()中使用它不起作用。我在KitKat atm上測試。 – WindRider

+2

更正:在檢查哪些片段當前處於活動狀態後,看起來像調用setRequestedOrientation()的更好的地方在OnBackStackChangedListener中。這種方法可以在重新啓動活動時實現更好的視覺轉換。 – WindRider

+0

我使用片段的onCreateView中的這些行工作() –

11

在每個片段中,設置請求的方向。

參考文檔:http://developer.android.com/reference/android/content/pm/ActivityInfo.html

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Fragment locked in portrait screen orientation 
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  

    // Fragment locked in landscape screen orientation 
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

    // Fragment screen orientation normal both portait and landscape  
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
} 
相關問題