如何找出所使用的可绘制资源?

13

我想知道在应用程序运行时使用的是哪个drawable资源,它可能来自ldpi、mdpi、hdpi或xhdpi。


请查看此帖子:https://dev59.com/EW445IYBdhLWcg3wnrzM#4766229 - Adil Soomro
我之前花了一些时间创建了一个应用程序:https://play.google.com/store/apps/details?id=com.roysolberg.android.developertools - Roy Solberg
6个回答

7
您应该能够按照这里所述获取设备的显示属性,并通过将结果与以下列表进行比较来确定运行时使用了哪些资源:
  • ldpi:低密度屏幕;约为120dpi。
  • mdpi:中等密度(传统HVGA)屏幕;约为160dpi。
  • hdpi:高密度屏幕;约为240dpi。
  • xhdpi:超高密度屏幕;约为320dpi。在API Level 8中添加。
  • nodpi:这可用于不希望缩放以匹配设备密度的位图资源。
  • tvdpi:介于mdpi和hdpi之间的屏幕;约为213dpi。这不被认为是“主要”密度组。它主要是针对电视而设计的,大多数应用程序不需要它 - 提供mdpi和hdpi资源对于大多数应用程序足够,系统会根据需要对其进行缩放。此限定符是在API级别13中引入的。

从这些信息中,您可以推断出以下内容,这也可能与您的问题相关:

四种主要密度之间存在3:4:6:8的缩放比例(忽略tvdpi密度)。因此,在ldpi中的9x9位图在mdpi中为12x12,在hdpi中为18x18,在xhdpi中为24x24。


6

首先,您需要获取设备的像素密度。

int density= getResources().getDisplayMetrics().densityDpi;

switch(density)
{
case DisplayMetrics.DENSITY_LOW:
   Toast.makeText(context, "LDPI", Toast.LENGTH_SHORT).show();
    break;
case DisplayMetrics.DENSITY_MEDIUM:
     Toast.makeText(context, "MDPI", Toast.LENGTH_SHORT).show();
    break;
case DisplayMetrics.DENSITY_HIGH:
    Toast.makeText(context, "HDPI", Toast.LENGTH_SHORT).show();
    break;
case DisplayMetrics.DENSITY_XHIGH:
     Toast.makeText(context, "XHDPI", Toast.LENGTH_SHORT).show();
    break;
}

4
我们可以通过了解设备的屏幕密度来确定这一点。
getResources().getDisplayMetrics().densityDpi

它将是DENSITY_LOW、DENSITY_MEDIUM或DENSITY_HIGH其中之一。


1

这不是一个确切的答案,但你看过这个了吗:http://developer.android.com/guide/practices/screens_support.html

ldpi: 低密度屏幕(~120dpi)的资源
mdpi: 中等密度屏幕(~160dpi)的资源
hdpi: 高密度屏幕(~240dpi)的资源
xhdpi: 特别高密度屏幕(~320dpi)的资源

这些是一般性的指导方针,虽然不完美,但是是一个很好的开始。


1

从布局文件夹打开xml文件。在底部,您会找到图形布局选项卡。在那里,您将能够查看xml文件的图形视图。对于左上角,请选择要测试可绘制的不同分辨率。它将相应地刷新视图。


0

这里是一个示例代码来查找它。 简单地将一些不同的可绘制对象放入不同的文件夹中,并检查设备自动选择哪个图像。

http://droidschools.com/archives/63


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接