如何识别正在使用的资源文件?

时间:2011-12-20 13:29:45

标签: android resources

拥有多个图片文件资源,例如image01.png,image02.png ....

我已经设置了具有不同区域设置/分辨率/方向限定符的资源文件夹,例如

/res/drawable-en-mdpi-port
/res/drawable-en-mdpi-land
/res/drawable-fr-hdpi-port...........

每个图像文件不同(宽高比/分辨率/区域设置 - 特定图像)

无论如何以编程方式确定应用程序中正在使用哪个实际资源文件? 对我测试在调试日志上发送它会很有用,因此可以确保正在使用正确的图像文件,即我已正确设置资源限定符并将正确的图像放在正确的文件夹中。

可以手动完成,但随着图像数量的增加,这将成为一件大事。

我猜测有关确定资源路径的类似问题,这可能是不可能的。 如果没有,有没有人有任何技巧/提示?我可以在图像中添加ID文本(甚至可以使用脚本用文件名批量水印图像)但是很高兴听到是否有更简单的方法。

3 个答案:

答案 0 :(得分:3)

如果您想知道当前(使用当前配置)加载的PNG文件,例如R.drawable.icon,您可以这样做:

TypedValue returnedValue = new TypedValue();
getResources().openRawResource(R.drawable.icon, returnedValue);
Log.d("Example", "Path to loaded resource: " + returnedValue.string);

在hdpi设备上,输出为:

D/Example ( 2028): Path to loaded resource: res/drawable-hdpi/icon.png

这将为您提供实际资源的路径,与路径的复杂程度无关。它仅适用于.apk中单个文件的资源,最值得注意的是drawables。

答案 1 :(得分:0)

你可以使用它来做它,但它只有在你遵循android文件夹命名约定

时才有效
 switch (getResources().getDisplayMetrics().densityDpi) {
                    case DisplayMetrics.DENSITY_LOW:
                        //Ldpi
                        break;
                    case DisplayMetrics.DENSITY_MEDIUM:
                        //Mdpi
                        break;
                    case DisplayMetrics.DENSITY_HIGH:
                        //Hdpi
                        break;
                    case DisplayMetrics.DENSITY_XHIGH:
                        //x-hdpi
                        break;
                    }

答案 2 :(得分:0)

如果您遵循应用程序中的android文件夹命名约定,通常会自动选择资源文件,否则您可以使用以下API在活动中获得屏幕分辨率,屏幕高度和屏幕宽度等。

 ActivityContext.getResources().so on, press ctrl+space in eclipse for help      
 ActivityContext.getWindow().so on, press ctrl+space in eclipse for help