【问题标题】:How mdpi, hdpi, xhdpi folder works?mdpi、hdpi、xhdpi 文件夹如何工作?
【发布时间】:2012-08-01 05:26:32
【问题描述】:

摘自上面的 Android 开发者指南链接:

320dp:典型的手机屏幕(240x320 ldpi、320x480 mdpi、480x800 hdpi 等)。
480dp:像 Streak (480x800 mdpi) 这样的补间平板电脑。
600dp:7 英寸平板电脑 (600x1024 mdpi)。
720dp:10 英寸平板电脑(720x1280 mdpi、800x1280 mdpi 等)

所以我只从这些尺寸的设计师那里得到了分辨率为每英寸 320 像素的图形(图像)

480x800 高清

720x1280 mdpi

800x1280 mdpi

我很困惑应该将哪种尺寸的图像放在 mdpi 文件夹、hdpi 文件夹和 xhdpi 文件夹中。我想制作一款可以在大多数安卓手机和平板电脑上运行的应用程序?

【问题讨论】:

    标签: android resolution


    【解决方案1】:

    当您请求提供替代资源的资源时,Android 会根据当前设备配置选择在运行时使用哪个替代资源。为了演示 Android 如何选择替代资源,假设以下可绘制目录分别包含相同图像的不同版本:

    drawable/
    drawable-en/
    drawable-fr-rCA/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/
    

    并假设以下是设备配置:

    Locale = en-GB 
    Screen orientation = port 
    Screen pixel density = hdpi 
    Touchscreen type = notouch 
    Primary text input method = 12key
    

    通过将设备配置与可用的替代资源进行比较,Android 从 drawable-en-port 中选择可绘制对象。

    系统根据以下逻辑决定使用哪些资源:

    参考:How Android Finds the Best-matching Resource

    其他参考:Density independenceProviding Alternative ResourcesBest Practices

    我会说你应该阅读完整的页面 Supporting Multiple Screens,我认为没有比它更好的文档了......

    【讨论】:

      【解决方案2】:

      您可以创建不同的图形对象以用于不同的像素密度。 Android 将 mdpi(160 像素/英寸)视为基本密度。所以对于 mdpi 设备,1 dp = 1 像素。在更高的密度下,每英寸有更多的像素(hdpi 为 240,xhdpi 为 320)。 Android 试图让图形图像在屏幕上占据相同的物理尺寸,而不管设备像素密度如何。因此,如果它只找到一个 mdpi 资源,并且设备是 hdpi,它会将图形缩放 240/160 = 150%,并将 xhdpi 图形的大小加倍。

      如果您不希望这种自动缩放(这会使图形看起来很糟糕),您可以简单地提供您自己的图形资源版本以用于更高的密度。这些图形的大小应与 Android 缩放 mdpi 资源的大小相同。

      请注意,存储在图像文件中的像素/英寸与此无关。这完全取决于您将图形文件放在项目资源目录中的位置。任何放置在res/drawable 中的图形都被假定为适合mdpi 显示的大小,就像放置在res/drawable-mdpi 中的图形一样。它在res/drawable-hdpi 中找到的图像文件被假定为适合 hdpi 显示等。当您的程序在特定设备上运行时,Android 将首先寻找与该设备的显示密度相匹配的图形。如果它没有找到一个,而是找到一个不同密度的,它将使用它并根据上述规则自动缩放图像。

      【讨论】:

      • 正如你所说“它在 res/drawable-hdpi 中找到的图像文件被假定为适合 hdpi 显示等”,所以我将 480x800 hdpi 放入 res/drawable-hdpi ??
      • @MuhammadIrfan - 如果图像尺寸适合 240 像素/英寸的显示,您可以将图像放入 res/drawable-hdpi。您应该知道,设备可以有不同的尺寸,但仍然是 hdpi。此外,设备可以具有相同的尺寸并具有不同的像素密度。这个不幸的事实被称为“设备碎片化”,也是 Android 编程复杂的部分原因。您是否正在尝试使图像完全适合显示器的尺寸?
      • @MuhammadIrfan - 图像的 dpi 无关紧要。无论 Photoshop、Gimp 或您使用的任何工具在图像中存储什么 dpi,Android 都会忽略它。 Android 考虑的唯一因素是图像放置在哪个目录中。
      • @MuhammadIrfan - 我认为您在这里能做的最好的事情就是使用drawable-large 等目录。如果您想避免基于显示密度进行缩放,请使用drawable-large-nodpi 等。如果您这样做,Android 将选择与屏幕尺寸最匹配的图像,然后将缩放到您的应用可用的实际像素(可能与显示尺寸不匹配)。阅读Providing Resources了解更多信息。
      • @Ahmed - 你也可以控制它。您可以将大小限定符(-large-small 等)添加到资源目录,也可以选择与密度等其他限定符一起添加。有关详细信息,包括所需的限定符顺序,请参阅文档(尤其是 Providing ResourcesSupporting Multiple Screens)。
      【解决方案3】:

      我对所有屏幕尺寸的碎片感到困惑,但基本情况是: 1.您需要在布局下创建各种文件夹来处理您的图像 2.图像将存在于drawables文件夹中,也存在于各种文件夹下。 3. 你应该有一个基本的 /layout 和 /drawable 文件夹来伴随非特定文件夹 4. 从 xhdpi 工作,然后缩小图像!

      特定屏幕文件夹的示例: /布局-hdpi /布局-xhdpi /drawable-hdpi /drawable-xhdpi

      据我所知: 480 x 800 是 hdpi(旧手机,例如 S2、HTC Desire 等) 720 x 1280 是 xhdpi(新手机,例如 S3、Galaxy Nexus 等)

      基本上,根据手机,android 会从必要的文件夹中获取资源,如果没有,它会从主 '\layout' 或 '\drawable' 文件夹中获取。例如,在 Galaxy Nexus 上运行的应用程序将从 '\layout-xhdpi' 中获取资源(如果该文件夹存在)。

      【讨论】:

      • 根据Android dashboard ldpi 和 mdpi 设备占过去两周内访问 Google Play 的设备的 23.2%。此外,屏幕尺寸和像素密度是独立变量。例如,有 480 x 800 设备是 mdpi。
      • 我本来打算用谷歌搜索的,但真的是 cbf 哈哈。不过谢谢,它比我想象的要多得多。但几年后,这个数字可能会减少一半或更少。另请注意,有些手机正在考虑 1080p 分辨率,我认为这很愚蠢......(我刚刚将我的应用程序从 hdpi 转换为 xhdpi,这是一个海滩哈哈)
      【解决方案4】:

      是的,您可以制作一个应用程序,但需要创建文件夹:/res/drawable、/res/drawable-mdpi、/res/drawable-hdpi 并为所有屏幕尺寸添加内容

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-01
        • 2014-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-12
        相关资源
        最近更新 更多