2013-09-27 126 views
0

我有一個專爲平板電腦設計的應用程序。它以縱向模式顯示其數據的一個視圖,以及橫向數據的不同視圖。用戶可以隨意在兩者之間切換。Android:鎖定屏幕方向有時

在較小的「手機」型設備上,橫向太小而無用,但縱向模式仍然可行。我希望在較小的設備上強制使用肖像,並說明7以下的任何內容,同時允許在平板電腦上顯示兩種模式。

我該如何解決這個問題?

回答

1

您應該遵循supporting multiple screens的開發者指南。然後,您可以使用sw限定符來切換物理屏幕大小。

+0

這是正確的做法,這比直接回答問題更可取。我相信以正確的方式做事總比一起劈開事情要好。 –

+0

所以我有一個/ layout文件夾和一個/ layout-sw600dp-land。在480x800手機上使用模擬器,應該沒有橫向佈局。然而,當我按Ctrl-F11將手機變爲風景時,它仍會嘗試將顯示切換爲風景。我如何防止這種情況? –

+0

鎖定方向與清單中的活動使用android:screenOrientation =「portrait」一樣簡單,但這不是解決問題的方法。這聽起來像你需要重新考慮小屏幕的佈局。 – Krylez

1

也許Krylez是正確的,正確的解決辦法是做別的事情,但如果你想反正鎖定/解除屏幕方向(我一起用它來與短期運行AsyncTasks以避免應對ProgressDialog)

public class Device { 

public static void lockOrientation(Activity activity) { 
    Display display = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    int rotation = display.getRotation(); 
    int tempOrientation = activity.getResources().getConfiguration().orientation; 
    int orientation = 0; 
    switch(tempOrientation) 
    { 
    case Configuration.ORIENTATION_LANDSCAPE: 
     if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) 
      orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; 
     else 
      orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE; 
     break; 
    case Configuration.ORIENTATION_PORTRAIT: 
     if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_270) 
      orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; 
     else 
      orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT; 
    } 
    activity.setRequestedOrientation(orientation); 
} 





public static void releaseOrientation(Activity activity) { 
    activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
} 

}