2011-10-05 139 views
22

因此,我正在爲Android的應用程序,我想強制橫向平板電腦和肖像方向手機。然而,看起來好像我只能從我所看到的方向鎖定方向鎖定,而這種方向鎖定會破壞希望爲設備分配兩個方向的目的。肖像爲手機,平板電腦(Android的佈局)景觀

片:風景 電話:肖像

說得更多的技術。

我在「res/layout-xlarge-land」中爲平板電腦上的景觀設計進行了佈局,並且在「res/layout」中擁有原始佈局,我只是想明確使用layout-xlarge-land作爲平板電腦。沒有別的,基本上只使用橫向的xlarge設備。

謝謝!

回答

42

根據設備密度設置特定的方向可能不起作用,因爲有電話密度高於平板電腦。

我所做的是通過設置活動標記的屬性在這樣的清單文件來禁用該設備的方向傳感器:

android:screenOrientation="nosensor" 

當你運行你的應用程序,默認情況下縱向設置爲手機和平板電腦的景觀(因此它會從layout-xlarge-land中選擇xml文件)。並且,由於您已設置了方向鎖定,因此它仍保持此方向。

+6

不是真的有用,我的Nexus 7被認爲是手機,並以縱向模式顯示。 – Nezneika

+0

我的回答解決了這個問題,請檢查一下 – Dante

+0

你是如何設置方向鎖的? –

0

我不完全確定你在說什麼,但似乎應該只是測量分辨率並採取相應措施。我的意思是,你怎麼知道它是手機還是平板電腦而不是分辨率不同?

+0

嗯,我想把它放在技術上。我在「res/layout-xlarge-land」中爲平板電腦上的景觀設計進行了佈局,並在「res/layout」中擁有原始佈局,我只是想明確使用平板電腦的layout-xlarge-land。沒有別的,基本上只使用橫向的xlarge設備。 – rwarner

+0

您可以在代碼中指定如何佈局屏幕並根據屏幕尺寸從適當的佈局xml中拉出。 –

1

您可以測量設備的實際尺寸(英寸),然後使用編程方式設置方向:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

要獲得設備,您可以物理尺寸使用公佈的代碼here

它不是100%準確的,但它足以決定設備的哪個王者正在運行應用程序。

-2

在佈局菜單中的「佈局大」文件夾佈局和佈局菜單中的「佈局」文件夾中設置llPhone佈局,設置佈局稱爲llTablet。通過菜單引用用戶輸入的第一個佈局。然後檢查你是否可以參考它。如果你不能參考llPhone那麼它的平板電腦。

llPhone = (LinearLayout) findViewById (R.id.llPhone) 
if (llPhone == null) { 
tablet = true; 
} 
else { 
tablet = false; 
}