2

我正在开发一个 Android 应用程序(API 11+)并且我想支持多种屏幕尺寸和密度,我的项目有不同的密度文件夹来提供可绘制资源(mdpi、hdpi、xhdpi 和 xxhdpi)和带有限定符的不同布局文件夹(小、正常、大和超大)。

来自谷歌文档:

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 个设备提供不同的布局?我怎样才能区分它们?

4

3 回答 3

1

与drawables有不同文件夹的方式相同,您可以为屏幕大小创建不同的布局。

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);
}

这只是一个例子。

于 2014-03-04T14:06:57.610 回答
1

您所说的 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 值在这里并不重要。只是如果你想让这些图像看起来更清晰/抛光。

于 2014-10-28T12:26:42.690 回答
0

如果您不将像素用于任何事物,并为 ldpi、mdpi、xdpi 提供不同的资产……您将获得很长的路要走。系统将确定它应该用于特定设备的布局文件和资产。

于 2014-03-04T14:07:25.513 回答