2011-11-18 117 views
14

我一直致力於Android項目,旨在兼容Android手機和平板電腦。在平板電腦上,該應用程序運行良好,看起來也不錯。然而,在手機上,我們遇到了編程和佈局方面的問題(使用10.1英寸的屏幕比4英寸的屏幕要容易得多)。爲了解決這些問題中的一些,我們決定暫時停用屏幕方向,但僅針對電話版本。如何鎖定手機屏幕方向,但不鎖定平板電腦? (Android)

的問題很簡單,我怎麼去活Android手機屏幕的方向,同時保持其活躍的Android平板電腦?我知道我可以在清單文件中做到這一點,但是,這也會鎖定我相信的平板電腦的方向。

回答

11

您也可以從應用程序中完成。

Lock screen orientation (Android)
http://developer.android.com/reference/android/app/Activity.html#setRequestedOrientation(int)

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

和屬性都可以在這裏找到:

http://developer.android.com/reference/android/R.attr.html#screenOrientation


要檢測,如果Android設備是平板電腦或手機,你應該使用這個解決方案(不同的SO Q & A),https://stackoverflow.com/a/9308284/492624

+1

爲什麼這個答案設爲有效?它沒有解釋如何在手機和平​​板電腦上設置不同的行爲。 –

2

它看起來像,不是不可能的,如果你處理這個在運行時,通過獲取屏幕大小,然後進行RunTimeConfigurationChanges,然後可將幫助你。

試試這個Handling Runtime Changes

讓我知道你是否成功了吧。

謝謝。

+0

我同意你的意見,但可以完成。要這樣做: 1.獲取設備的屏幕分辨率。 2.覆蓋活動中的onConfigurationChanged方法。 –

1

一種方法是,創建手機版和平板電腦版的獨立活動。然後在android清單文件中修正它們的方向。另一種方法是檢查就是BEING當前使用的設備,並使用代碼修復活動本身的定位,

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

創建單獨的活動,是因爲它很容易更好的方式來保持標籤和手機版本。

10

首先,儘量防止這樣做。我選擇了todo,因爲這是解決複雜問題的簡單方法。但是,真的,儘量防止這樣做。

如果你真的想待辦事項它,使用下面的代碼。

在您的活動創建一個方法:

private boolean isTablet() { 
     return (this.getResources().getConfiguration().screenLayout 
      & Configuration.SCREENLAYOUT_SIZE_MASK) 
      >= Configuration.SCREENLAYOUT_SIZE_LARGE; 
    } 

然後在您的onCreate請執行以下操作:

if (!isTablet()) { 
     // stop screen rotation on phones because <explain> 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    }