2014-03-04 78 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值在这里并不重要。就是如果你想让这些图像看起来更清脆/光亮。