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

mrd*_*mrd 7 resources android drawable

我是否正确理解这一点:

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

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

我的调整是否正确?

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

Com*_*are 24

我的调整是否正确?

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

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

并不是的.

您将资源放在res/drawable/本质上可扩展的(例如,a ShapeDrawable).你把资源放在res/drawable-nodpi/那里,出于某种原因,你不希望缩放以匹配设备密度.

如果Android发明了一个新的密度桶(例如,-uhdpi对于400dpi的超高密度),如果你跳过一个密度桶,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>
Run Code Online (Sandbox Code Playgroud)