当前位置: 首页 > 知识库问答 >
问题:

如果为ldpi、mdpi、hdpi、xhdpi提供了可绘制资源,则无需为nodpi提供该可绘制资源?

孟建木
2023-03-14

我是否正确理解了这一点:

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

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

我的理解正确吗?

那么,为什么在/res/drawable中提供相同的资源是有意义的,唯一的原因是,如果为Android操作系统定义了一个新的密度桶,那么让应用程序更经得起未来考验?

共有3个答案

丁景山
2023-03-14

如果您的资源是为所有四个密度添加的,那么您不必将绘图添加到文件夹/res/draable中是正确的。但是,您猜对了,如果出现新的限定符,最好在默认文件夹中包含一些东西。因此,我建议不要将mdpi资源放置在/res/draable-mdpi文件夹中,而是放置在默认文件夹中(/res/draable/)。这对每种资源都是一个很好的做法。

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

董和风
2023-03-14

这是正确的,只要您在所有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>
姚和顺
2023-03-14

我的理解正确吗?

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

那么,为什么在/res/drawable中提供相同的资源是有意义的,唯一的原因是,如果为Android操作系统定义了一个新的密度桶,那么让应用程序更经得起未来考验?

不是真的。

您将本质上可扩展的资源(例如,ShapeDrawable)放在res/draable-nopi/中。出于某种原因,您不想缩放资源以匹配设备密度。

如果Android发明了一个新的密度桶(例如,超高密度400dpi的uhdpi),如果你跳过一个密度桶,Android可能会像今天一样:扩展你的其他版本。例如,如果您有xhdpi,但没有hdpi,Android将对xhdpi图像进行下采样,以便在设备上使用。

 类似资料:
  • 研究android,现在我有一些图像可以放入可绘制的dirs(HDPI/LDPI/MDPI/XHDPI)。我读了很多书,但我还是不明白。每个目录的图像大小应该是多少?

  • 哪些是可绘制的推荐尺寸:LDPI、MDPI、HDPI、XHDPI、XXHDPI、XXXHDPI或我可以使用相同大小的图像,并通过编程改变它,比如改变宽度和高度?

  • 我试图将一个可绘制资源转换为位图,但每个代码段和每个自己的尝试都返回null或空字符串。 我尝试了一些基本的方法,比如Bitmapfactory。decodeResource(在这里,我尝试了活动上下文、应用程序上下文等,以及各种可绘制资源(png、vector、xml),我尝试了转换中的不同代码段,它总是返回null或“”。我还尝试更改可绘制文件夹而不是可绘制文件夹-24我尝试了基本的可绘制文件

  • 我需要动态设置通知图像图标,它的名字动态传递给我的类。为此,我需要设置builder.setSmallIcon(intres_id)。我谷歌了一下,但是人们已经使用了setDrawableImage()的例子,我已经看到了这篇文章,并相应地在我的代码中实现。 当然,这会显示错误,因为setSmallIcon()需要将整数传递给它。con是传递给我的构造函数的上下文。我已经看到如何在android中

  • Android如何缩放可伸缩性?在这个项目中,我有xhdpi、hdpi、mdpi,但我没有ldpi。如果我在带有ldpi屏幕的手机上运行应用程序,会发生什么? 我知道,可提取的内容将自动缩小。但是,哪些可提取的将被采取?来自mdpi?