Android:提供资源时区分设备分辨率

Android: distinguish between device resolutions when providing resources

我有 android 项目为不同的屏幕分辨率提供不同的 dimens.xml。我通过在我的 /res 文件夹中定义 values-swXXXdp 文件夹来做到这一点。

但是,我现在无法区分以下两种屏幕分辨率:

  1. 768x1280,160dpi 来自
  2. 768x1024, 160dpi

到目前为止我尝试了什么:

有没有人有提示,我必须使用什么文件夹名称来提供 dimens.xml 仅适用于 2 号屏幕分辨率?

提前致谢!

Does anyone have a hint, what folder name I have to use, to provide a dimens.xml ONLY for screen resolution number 2?

我认为这是不可能的,至少在 wh 限定符下是不可能的。为什么?根据 Providing Resources 关于 Android 开发人员的指南,您可以指定加载特定资源所需的最小屏幕宽度或高度,但不能指定最大值。

让我们看看如果您将资源组织成这样会发生什么:

res/
    values/
    values-h1024dp/

Android 有 defined behavior 个匹配资源,具体取决于设备配置。当您在屏幕高度为 800dp 的设备上打开应用程序时,最佳匹配将是 values,因为 1024dp 不适合 800dp。但是,如果您要在屏幕高度为 1024 或更高 的更大设备上打开相同的应用程序,它将使用 values-h1024dp 目录。

很遗憾,您只想将第二个资源目录用于特定尺寸的设备,即 768dpx1024dp。

在 Android 中提供资源的设计方式与您期望的不同,但有一个 way to achieve what you need - 别名资源。

为了提供只有一个目录与配置为 w1024dp 的设备匹配的资源目录结构,我将创建以下结构:

res/
    values/
    values-h1024dp/
    values-h1025dp/

并在 values-h1025dp 中创建 xml 个文件,其中包含 values 中资源的别名。这样你就可以拥有一个匹配所有设备的资源文件,除了屏幕高度为 1024dp 的设备。

请注意,它适用于具有您指定配置的设备,但仅限于横向模式,因为我只使用了 h 限定符。