【问题标题】:Android layout mdpi phone vs tabletAndroid 布局 mdpi 手机与平板电脑
【发布时间】:2014-03-04 13:52:44
【问题描述】:

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

来自谷歌文档:

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

【问题讨论】:

    标签: android android-layout mdpi


    【解决方案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);
    }
    

    这只是一个例子。

    【讨论】:

    • 感谢您的回答,正如我在问题中所说,我有不同的带有大小限定符的文件夹,问题是我不明白 Android 如何检查设备是否“小”、“正常” ”、“大”或“xlarge”,如果它基于文档中的屏幕 dp 大小让我相信,那么 480x800 mdpi 手机和 480x800 mdpi 平板电脑是“大”的,因为“大屏幕至少为 640dp x 480dp”但是我想要手机和平板电脑的不同布局
    【解决方案2】:

    很可能,您所说的 mdpi 设备相当大。就像平板电脑一样。 但是由于这些歧义(并且因为不同的设备错误地报告了它们的大小/dpi 值),Android 决定提出一种不同的方法。 如果您可以重新考虑仅针对 Android 13+(这是合理的,因为 11-12 的市场份额约为 0%),您可以使用 swXXXdp(Smallest Width in 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 值在这里并不重要。只是为了让这些图像看起来更清晰/更精致。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-31
        • 2014-07-27
        • 1970-01-01
        相关资源
        最近更新 更多