2010-05-14 71 views
14

我想在我的首選項中創建複選框允許用戶切換方向更改的活動。如何在android中切換方向鎖?

在類似的問題中,人們只寫完整的方向鎖(通過覆蓋onConfigurationChanged方法或在AndroidManifest.xml中添加configChanges)或方向實施(通過setRequestedOrientation)。

有沒有辦法切換方向鎖?


編輯: 我已經創建了一個集擇優取向三種狀態中的一種方法:風景,人像和傳感器。該方法與檢索方向getResources().getConfiguration().orientation)並將檢索到的方向保存到偏好中一起使用。然後,在需要鎖定方向的活動中,我會根據偏好設定首選方向來啓動此方法。

private static void setActivityOrientation(Activity activity, int preferenceOrientation) { 
    if (preferenceOrientation == Configuration.ORIENTATION_LANDSCAPE) { 
     if(activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){ 
     // You need to check if your desired orientation isn't already set because setting orientation restarts your Activity which takes long 
      activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
     } 
    } else if (preferenceOrientation == Configuration.ORIENTATION_PORTRAIT) { 
     if(activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){ 
      activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     }  
    } else { 
     if(activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_SENSOR){ 
      activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 
     } 
    } 
} 

回答

5

我不明白setRequestedOrientation有什麼問題。

SCREEN_ORIENTATION_SENSOR結合到橫向或縱向似乎是你想要的,不是嗎?

if(....) 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
else if(....) 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
else if(....) 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 
+4

我想實現的是有點複雜。我想要鎖定方向。示例:如果用戶想在應用程序中鎖定方向,我讀取getResources()。getConfiguration()。orientation,然後觸發setRequestedOrientation以讀取當前方向。當他想禁用鎖定時,我只需將SetRequestedOrientation設置爲ActivityInfo.SCREEN_ORIENTATION_SENSOR。你的回答幫助我意識到這一點,所以我接受它。 – pixel 2010-05-15 16:53:58

+0

@pixel你發現了逆向嗎?我在這裏有同樣的問題:http://stackoverflow.com/questions/6599770/screen-orientationlock – 2011-07-07 00:16:08