您可以指定Android设备使用的资源文件夹吗?

时间:2013-08-02 19:36:19

标签: android android-layout

我刚刚获得了新的Nexus 7,它从drawable-xhdpi文件夹中提取图像,因为它是1920x1200。 Nexus 10也从drawable-xhdpi文件夹中提取。因此,相同的图像在Nexus 7上看起来太大了(确切地说太大了150%)。有没有办法指定用于特定设备的资源(可绘制)文件夹?

听起来我不应该试图超越默认的可绘制桶,因为有太多的屏幕尺寸,当我试图支持更多设备时它可能会阻碍我。那么处理这个问题的最佳方法是什么?下图完全说明了我的问题。播放按钮从Nexus 10缩小到新的Nexus 7,而大胡子的家伙则按比例放大,以便在两个设备上保持相同的物理尺寸。我的图像目前正在做大胡子的家伙正在做的事情,但我希望它可以做新的Nexus 7缩小的播放/连接按钮。 (上图=新Nexus 7 bottom image = Nexus 10)

New Nexus 7

Nexus 10

3 个答案:

答案 0 :(得分:2)

为了继续使用可绘制的资源文件夹,我必须执行以下操作来区分Nexus 7 2013和Nexus 10,因为它们默认使用xhdpi文件夹:

对于Nexus 7,我最终使用了:drawable-sw600dp-xhdpi

对于Nexus 10,我最终使用了:drawable-sw720dp-xhdpi

我在每个文件夹中有两组不同的资产缩放。

答案 1 :(得分:1)

您无法为特定设备设置可绘制文件夹,这也是不切实际的,因为那里有太多设备(例如,请参阅here)。

但是,如果您对android选择用于每个设备配置的文件桶的方式不满意,您可以使用自己的算法。在这种情况下,有两个选项可以放置文件:

  1. 将图像文件放在res / drawable-nodpi(或res / raw)中。为每个图像添加一个后缀/前缀,以显示它用于哪个配置。

  2. 将图像文件放入资源中。这是一种更灵活的方法,因为您甚至可以创建子文件夹和任何您想要的文件名。

  3. 在这两种方法中,您还应该使用自己的图像采样方法,具体取决于您自己的规则。

答案 2 :(得分:0)

您可以使用以下代码获取尺寸,然后根据显示尺寸将图像缩放到所需尺寸。

    Display display = getWindowManager().getDefaultDisplay();
    int width = display.getWidth();
    int height = display.getHeight();

    DisplayMetrics metrics = new DisplayMetrics();    
    getWindowManager().getDefaultDisplay().getMetrics(metrics);    
    int screenDensity = metrics.densityDpi;