【问题标题】:How to get the qualifiers for a given resource (when using it)?如何获取给定资源的限定符(使用时)?
【发布时间】:2013-05-23 11:27:12
【问题描述】:

我有一个非常简单的问题:

给定一个来自 R.java 文件的特定资源(id、string、drawable、...),是否有可能知道它在其文件夹中与它匹配的限定符?如果有,怎么做?

例如,如果我的设备有一个 hdpi 密度的屏幕,并且我在 "res/drawable-hdpi" 和 "res/drawable-mdpi" 上有相同的文件名 "x.png",我即将解码这个文件,我想得到的是它从 res/drawable-hdpi 获取文件,并且通过这样做知道它具有 hdpi 密度。

当然,在这个例子中,如果文件存在于其他文件夹中,但不存在于 hdpi 文件夹中,我希望它告诉我在解码文件时将使用哪一个。

其余的限定符(语言环境、屏幕大小、...)也是如此。

【问题讨论】:

  • 我对这个问题很感兴趣。我遇到了同样的问题。你解决了吗?您是否发现了一个函数来猜测设备在任何情况下使用的限定符?
  • @GmloMalo 不。我什至不记得我为什么想要这个......
  • @GmloMalo 对不起。如果你发现了,请写在这里。将来可能有用,或者很高兴知道。

标签: android android-resources qualifiers


【解决方案1】:

使用http://developer.android.com/reference/android/content/res/Configuration.html

dpi 示例:

    Configuration config = getResources().getConfiguration();
    Log.d("DPI ", Integer.toString(config.densityDpi));

【讨论】:

  • 我给你资源ID的部分在哪里?目前,我所看到的只是您已经确定了设备的密度。它与给定的资源无关。
  • 这个,你可以查看数字的dpi。 stackoverflow.com/questions/2025282/… 使用您手机的配置和已知密度桶检查 dpi。
  • 你不明白这个问题。我不要求密度。我问如何获取我选择的资源的原始文件夹。例如,如果我在多个文件夹中有一个可绘制对象(“drawable-ldpi”、“drawable-port”、“drawable-iw”、...),我想找到它在尝试获取时选择了哪些文件它。
  • okey 对不起,但是如果你只对可绘制文件夹使用密度限定符(hdpi、xhdpi 等),我的方法是必须使用
  • 不,因为它不知道它使用了哪个文件,只知道哪个文件最适合它以防万一。
【解决方案2】:

如果您针对大量设备,这个问题会发生很多,所以我决定创建自己的简单应用程序来找出正在使用的可绘制对象。Here 是链接。

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    我不认为 android 框架为您的应用程序提供了一种机制来确定使用了哪个资源。

    但您始终可以根据 android 资源限定符文档中指定的规则制定规则。

    但是我不清楚您的具体要求是什么?您是否希望您的应用程序能够识别所使用的资源?还是您只需要在设计/构建期间这样做。

    至于确定正在使用哪个资源,您可以轻松地根据屏幕密度、屏幕大小、当前手机区域设置和当前方向制定逻辑,所有这些都可以通过 android 中存在的各种 api 获得。

    【讨论】:

    • 假设代码对存在哪些资源文件一无所知,我想要的是有一个函数可以告诉给定资源使用了哪些限定符。它用于运行时(因为否则我可以看到自己的文件在哪里......)。
    • 这在我看来是不可能的......你能做的最好的事情是你知道你在每个文件夹中放置了哪些资源以及你提供的限定符。根据我提到的设备指标,您可以猜测您的应用正在获取哪个资源。我认为您无法找出特定资源存在哪些限定符,这将由 android 系统完成,而不是您的应用程序。
    猜你喜欢
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多