2013-02-26 21 views
39

的Nexus 7:7" 1280×800如何包括10" 和7" 佈局適當

的Galaxy Tab 10.1 10" 1280x800的

我想我的應用程序在7個10英寸平板電腦上運行。據我知道,我一定要包括在我的應用程序,這些佈局文件夾:

7英寸平板電腦

  • 佈局sw600dp
  • 佈局sw600dp端口

10寸片劑

  • 佈局sw720dp
  • 辣油t-sw720dp-port

它在nexus 7上運行良好,但在10「平板電腦上加載sw600dp佈局。

如果我有這些默認文件夾:

  • 佈局
  • 佈局端口

10" Galaxy Tab的負載從這些

佈局如果我只包括默認佈局文件夾和sw600dp之一,它崩潰nexus7上。

H我是否應該支持手機,7「平板電腦和10」平板電腦,如果10「星系標籤不會加載sw720p佈局?

編輯:格式

+3

是你的API級別> 13(版本> 3.2)? – 2013-02-26 13:52:57

+0

galaxy tab是api level 15(4.0.4)。我的最低api級別應該是8 ... – berestom 2013-02-26 13:59:27

回答

58

問題是,我沒有默認的佈局文件夾。

我試過了,只使用sw600dp和sw720dp文件夾。我仍然不知道爲什麼他們不工作,但我不在乎。無論如何,我無法使用swxxxdp <,所以擰緊。

所以,如果你想要寫一個應用程序,具有支持手機(2.2+),7英寸平板電腦和10個英寸平板電腦,使用下面的舊校園的東西:

佈局這是默認的,它是即使你不打算支持手機也需要!

佈局大7" 平板電腦(適用於模擬器和nexus7)

佈局XLARGE 10" 平板電腦(適用於模擬器和galaxytab10.1)

Other people已經來到也一樣的結論。

+1

我同意,我有同樣的問題,解決了添加layout-xlarge和drawable-xlarge文件夾。 – 2013-04-11 06:46:46

+0

我同意你的意見。 sw600dp不再是標準的實施方式。我沒有嘗試過你的解決方案,但我想這是唯一的出路。尋找更好的方法。我發現我會分享。 – 2016-02-22 18:04:58

+0

確切地說,sw600dp沒有爲我工作。所以我使用了layout-large和layout-xlarge。 – TharakaNirmana 2017-11-24 04:49:31

20

我在我的應用程序中也面臨這樣的問題。但我找到了一個很好的解決方案。 我只有一個佈局tablet和目錄名稱是layout-sw600dp。 現在,當部分出現高度和寬度問題時,我創建了幾個不同的values目錄,其中我放置了dimensionsfont size和其他存根。因此平板電腦屏幕的layout中不會有constant的值。

androd:layout_width:"60dp" // i drop this scenario 

androd:layout_width:"@dimen/tab_width" // i used this scenario 

和你values目錄名會像

values-xlarge 
values-large 

所有值將從你的價值觀目錄中獲取。它不會創建不同的佈局,但一個佈局可以多次使用。

以下是Developer.android網站的文字。 配置實例

爲了幫助您定位你的一些設計,針對不同類型的設備,這裏是典型的屏幕寬度的一些數字:

320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc). 
480dp: a tweener tablet like the Streak (480x800 mdpi). 
600dp: a 7」 tablet (600x1024 mdpi). 
720dp: a 10」 tablet (720x1280 mdpi, 800x1280 mdpi, etc). 

從表2使用尺寸限定符,您的應用程序可以切換您的手機和平板電腦的不同佈局資源使用您想要的寬度和/或高度的任何數字。例如,如果600dp就由您的平板電腦佈局支持的最小可用寬度,您可以提供佈局的這兩套:

RES /佈局/ main_activity.xml#適用於手機
RES /佈局sw600dp/main_activity.xml #對於平板電腦

===

在此,你可以看到,佈局1280 * 720 layout-sw720dp下,這樣反而創造layout-normal-xlarge你應該使用這個東西,它可以讓你來決定不同的。使用layout-large-mdpilayout-large-ldpi來區別,而不是通過其smallest width識別?因爲,android爲不同的圖片提供drawables目錄,唯一的事情就是它的分辨率。你有上面的解決方案。

編輯

然後,你必須制定不同的佈局。沒有其他選擇。我發現在http://jamil.fluidsoul.net/2011/03/06/creating-android-applications-for-multiple-screen-sizes

Low density Small screens QVGA 240x320 (120dpi): 

layout-small-ldpi (240x320) 
layout-small-land-ldpi (320x240) 

Low density Normal screens WVGA400 240x400 (x432) (120dpi): 

layout-ldpi (240 x 400) 
layout-land-ldpi (400 x 240) 

Medium density Normal screens HVGA 320x480 (160dpi): 

layout-mdpi (320 x 480) 
layout-land-mdpi (480 x 320) 

Medium density Large screens HVGA 320x480 (160dpi): 

layout-large-mdpi (320 x 480) 
layout-large-land-mdpi (480 x 320) 

Galaxy Tab (240 dpi): 

layout-large (600 x 1024) 
layout-large-land (1024 x 600) 

High density Normal screens WVGA800 480x800 (x854) (240 dpi): 

layout-hdpi (480 x 800) 
layout-land-hdpi (800 x 480) 

Xoom (medium density large but 1280x800 res) (160 dpi): 

layout-xlarge (800 x 1280) 
layout-xlarge-land (1280 x 800) 
+0

我的問題是,我的7「和10」佈局完全不同。 – berestom 2013-02-26 16:47:49

+0

看到我編輯的答案。 – 2013-02-27 06:04:03

1

這很奇怪,因爲你做的是正確的事情。

Nexus 7應該選擇sw600dp限定符。
如果可用,應該由Galaxy Tab選擇sw720dp限定符。

你確定它試圖找到合適的佈局時崩潰嗎? Android可能會找到正確的佈局,但佈局xml文件中的某些內容可能會丟失,並導致崩潰。

+0

它在setContentView上崩潰。這裏是另一個例子:ainol venus 7「1280x800 160dpi不會加載sw600dp佈局 – berestom 2013-02-26 16:45:48

+0

我已經測試過一次又一次,我的默認佈局是10」,它們在sw720dp文件夾中,星系標籤加載sw600dp的 – berestom 2013-02-27 09:49:52

+0

@ berestom:僅供參考:ainol venus擁有sw480dp,'普通'類別的屏幕(不大或不大)。 – 2013-03-14 13:54:00

2

是的,你應該使用佈局相關的文件夾,但也要確保任何獨立於設備的佈局進入你的res/layout文件夾。

這是在Android開發者網站上提到的,但爲了重申他們的觀點,如果您的佈局只在支持所謂大型和普通尺寸設備的應用上的layout-xlarge文件夾中可用,則該應用將會因爲較小的設備將無法找到此資源的任何匹配項。

這裏是一個很好的文件夾結構,先從:

res/layout 

保持一個獨立於設備的佈局在那裏,你能避免這個,如果你佔了每一個可能的預選賽類型,但是這仍然是更安全的選擇。

如果要添加特定的佈局發言權7和10個英寸平板電腦,使用所有的以下內容:

res/layout-large 
res/layout-xlarge 
res/layout-sw600dp 
res/layout-sw720dp 
res/layout-sw800dp 

等了你要支持任何特定的設備屏幕的寬度。應該注意的是,sw600支持儘可能小的寬度,因此避免在設備處於橫向時使用屏幕寬度。使用swxxxdp qualifers是首選,但是這些都是在API 13中添加的,所以對於較舊的Android OS,您仍然需要較大的xlarge。

關於使用dpi,請注意,如果您只爲一個尺寸設置了一個密度限定符,例如layout-large-mdpi,則任何匹配大限定符的設備都將使用此處的佈局而不是另一個文件夾,因此達到最佳匹配標準,您可以閱讀有關here的最佳匹配條件。它將在匹配密度之前將其作爲大型設備進行匹配,因此非mdpi密度屏幕仍將使用這些佈局。

要解決這個問題,您必須包含您支持的任何其他密度的文件夾,因此請繼續上面的示例中的layout-large-hdpi,並在此文件夾中包含您在mdpi文件夾中使用的hdpi版本if你需要他們與衆不同。

避免重複您的佈局,當然,請不要複製獨立於設備的佈局到每個未使用的文件夾中,如果您只需要它們在res/layout中,只需將需要這些限定符的佈局保留在文件夾中並正確組織它們,確保您的文件夾以正確的優先順序以限定符命名,以防止使用密度/大小組合的錯誤文件夾。

+0

不起作用。進出出去搜查了四周。其他人也有同樣的問題。 sw600dp只是不起作用。對於我的oneplus one,它會提取sw600dp文件夾佈局。 – 2016-02-22 18:02:29