2014-03-04 141 views
0

我正在開發一個Android應用程序(API 11+),我想支持多種屏幕大小和密度,我的項目有不同的密度文件夾以提供可繪製的資源(mdpi,hdpi,xhdpi和xxhdpi )和具有限定符(小,正常,大和xlarge)的不同佈局文件夾。Android佈局mdpi手機vs平板電腦

從谷歌文檔:

xlarge screens are at least 960dp x 720dp 
large screens are at least 640dp x 480dp 
normal screens are at least 470dp x 320dp 
small screens are at least 426dp x 320dp 

我想我明白了 「DP」 單元。如果我沒有錯,一個480x800px的mdpi手機屏幕有480x800dp單位,因爲在mdpi設備1px = 1dp,所以這個屏幕應該很大。相同大小和密度的平板電腦太大了嗎?

如何爲這2個設備提供不同的佈局?我如何區分它們?

回答

0

與繪製不同文件夾的方式相同,您可以爲屏幕大小創建不同的佈局。

res/layout/my_layout.xml    // layout for normal screen size ("default") 
res/layout-small/my_layout.xml  // layout for small screen size 
res/layout-large/my_layout.xml  // layout for large screen size 
res/layout-xlarge/my_layout.xml  // layout for extra large screen size 
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation 

res/drawable-mdpi/my_icon.png  // bitmap for medium density 
res/drawable-hdpi/my_icon.png  // bitmap for high density 
res/drawable-xhdpi/my_icon.png  // bitmap for extra high density 

從Android文檔:http://developer.android.com/guide/practices/screens_support.html

編輯: 以編程方式檢測設備是手機或平板電腦,您可以使用此代碼:

public static boolean isTablet(Context context) { 
    return (context.getResources().getConfiguration().screenLayout 
      & Configuration.SCREENLAYOUT_SIZE_MASK) 
      >= Configuration.SCREENLAYOUT_SIZE_LARGE; 
} 

然後,在您的活動中,您可以根據之前的值設置不同的佈局:

@Override 
onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    if isTablet(this) 
     setContentView(R.layout.handset_main_layout); 
    else 
     setContentView(R.layout.tablet_maint_layout); 
} 

這只是一個例子。

+0

感謝您的回答,我有不同的大小限定符文件夾,正如我在問題中所說的,問題是我不明白Android是如何檢查設備是「小」,「正常」,「大」或「xlarge」,如果它基於屏幕dp大小像文檔讓我相信那麼480x800 mdpi手機和480x800 mdpi平板電腦是「大」,因爲「大屏幕至少640dp x 480dp」,但我想要不同的佈局手機和平板電腦 – Istigar

+0

我已更新我的答案 – Manitoba

0

如果您不使用任何像素,併爲ldpi,mdpi,xdpi,...提供不同的資產,您將獲得很長的路。系統將確定它應該用於特定設備的佈局文件和資產。

0

很可能,你所說的mdpi設備是相當大的。作爲一個片劑之一。 但由於這些歧義(因爲不同的設備錯誤地報告了它們的尺寸/ dpi值),Android決定提出一種不同的方法。 如果你能重新考慮針對Android的13+只(這是合理的,因爲11-12的市場份額約爲0%),你可以使用swXXXdp(DP中的最小寬度)濾波器:

res/layout-mdpi/content.xml   for phones and phablets 
    res/layout-sw600dp-mdpi/content.xml for 7" tablet 
    res/layout-sw720dp-mdpi/content.xml for 10" tablet and above 

而且dpi值在這裏並不重要。就是如果你想讓這些圖像看起來更清脆/光亮。