2012-05-19 23 views
7

我是否正确理解这一点:如果为ldpi,mdpi,hdpi,xhdpi提供了可绘制资源,那么这个drawable不需要为nodpi提供吗?

所有android设备都属于以下4个密度桶之一:ldpi,mdpi,hdpi,xhdpi。

因此,如果为这些密度中的每一个提供可绘制资源(在这些文件夹的每个文件夹中都存在drawable或同名),则不需要在/ res中提供具有相同名称的drawable /可绘制或/ res/drawable-nodpi。

我的说话正确吗?

因此,如果为Android OS定义新的密度桶,为什么在/ res/drawable中提供相同资源的唯一原因是为了使应用更具前瞻性?

回答

24

我的说话正确吗?

通过这一段,你或多或少是正确的。你在下一段中有点“脱离轨道”:

所以,唯一的原因,为什么在/ res/drawable中提供相同的资源是有意义的,为了使应用程序更具前景 - 如果为Android OS定义了新的密度桶,那么这种方法是否有效?

不是。

您将本质上可扩展的资源放入res/drawable/(例如ShapeDrawable)。您将资源放在res/drawable-nodpi/中,出于某种原因,您不希望缩放到匹配设备密度。

如果Android发明了一个新的密度桶(例如,-uhdpi用于400dpi的超高密度),如果您跳过密度桶,Android可能会做今天的工作:缩放您的其他版本。例如,如果您有-xhdpi且没有-hdpi,则Android会下载-xhdpi图片以便在-hdpi设备上使用。

+0

尼斯关于nodpi概念的说明很好。 –

0

如果您的资源是针对所有四种密度添加的,那么您确定已将添加到文件夹/res/drawable。但是,如果出现新的限定符,则您已经正确猜测最好在默认文件夹中包含某些内容。因此,我建议将mdpi资源不放到/res/drawable-mdpi文件夹,而是放在默认文件夹中(/res/drawable/)。对于各种资源来说这是一个很好的做法。

至于/res/drawable-nodpi文件夹,它是一个特殊的文件夹,因为它应该包含不像所有其他限定符那样自动缩放的资源。因此,您通常单独使用/res/drawable-nodpi文件夹,或根本不使用它。

+0

那么为什么downvote?答案中有什么不正确的地方? – Malcolm

5

这是正确的,只要您在所有4个密度桶中都有可绘图。一种常见的做法是在/ res/drawable中绘制一个自定义可绘制的表示您的密度跨度绘图。

例如,您可能想要一个具有不同状态的按钮,用于按下和不按下按钮。首先,您需要为每个按下的按钮和未按下的按钮添加一个可绘制的密度。然后,您可以在/ res/drawables中创建以下button_black_selector.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="false" 
     android:drawable="@drawable/button_black"/> 

    <item android:state_pressed="true" 
     android:drawable="@drawable/button_black_selected" /> 

</selector> 
+0

有趣而优雅的方法,tx,David Z – mrd

相关问题