首页 文章

如果为ldpi,mdpi,hdpi,xhdpi提供了可绘制资源,那么这个drawable不需要提供nodpi吗?

提问于
浏览
7

我是否正确理解这一点:

所有Android设备都属于这4个密度桶中的一个:ldpi,mdpi,hdpi,xhdpi .

因此,如果为密度中的每一个提供了可绘制资源(每个文件夹中都存在drawable或同名),则无需在/ res / drawable中提供具有相同名称的drawable或/ RES /抽拉-nodpi .

我的调整是否正确?

那么,为什么在/ res / drawable中提供相同的资源是有意义的唯一原因是,为了使应用程序更具有前瞻性,以防为Android OS定义新的密度存储桶?

3 回答

  • 24

    我的调整是否正确?

    通过这一段,你或多或少是正确的 . 你的下一段有点“脱轨”:

    因此,如果为Android OS定义了新的密度存储桶,为什么在/ res / drawable中提供相同资源才能使应用程序更具未来性能的唯一原因是什么呢?

    并不是的 .

    您将资源放在 res/drawable/ 中,这些资源具有内在可扩展性(例如, ShapeDrawable ) . 您将资源放在 res/drawable-nodpi/ 中,由于某种原因,您不希望缩放以匹配设备密度 .

    如果Android发明了一个新的密度存储桶(例如,对于超高密度的400dpi,则为 -uhdpi ),如果您跳过密度存储桶,Android可能会执行今天的工作:扩展其他版本之一 . 例如,如果您有 -xhdpi 并且没有 -hdpi ,则Android会对 -xhdpi 图像进行下采样,以便在 -hdpi 设备上使用 .

  • 5

    这是正确的,只要你在所有4个密度桶中都有抽屉就可以了 . 一种常见的做法是在/ res / drawable中制作一个自定义绘图,它指的是您的密度跨越drawables .

    例如,您可能需要一个按下和未按下状态的按钮 . 首先,您将为按下和未按下的按钮包含每个密度的可绘制对象 . 然后你可以在/ 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

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

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

相关问题