Android Studio 中关于书中较旧示例的 drawable 和 mipmap 的混淆

Confusion about drawable and mipmap in Android Studio from older example in book

[免责声明:首先我知道有很多关于 drawable 和 mipmap 文件夹的帖子,我阅读了其中的一些]

从书 Android 编程 - The Big Nerd Ranch Guide 中有一个例子,我必须在 Button 上的一些文本旁边插入一个图标。对于更高分辨率的屏幕,包含多种尺寸的图标是有意义的。在他们的解决方案中,他们将所有图像都放在许多不同的 Drawable 文件夹中,这些文件夹具有不同的图像分辨率大小。

经过大量的试验和错误后,我将图标放在 drawable 文件夹中,让它在 mipmap 文件夹中工作:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/next_button"
    android:text="@string/next_button"
    android:drawableRight="@drawable/arrow_right/"/>

但是,我对它的工作原理有些困惑:

  1. 人们常说只有应用程序图标应该放在 mipmap 文件夹中,是这样吗?应用程序图标是什么?其他人说只有启动器图标应该放在那里,而还有人说只有图标应该放在那里。到底是哪一个,互斥的选项!
  2. 我无法自动完成 Android Studio 中的 mipmap 文件夹,这让我觉得我必须将所有内容放入我的 drawable 文件夹中,因为那里 Android Studio 会自动完成我。但是,默认情况下 drawable 文件夹没有子文件夹。这让我相信 drawable 文件夹不应该再用于不同分辨率的图像,否则为什么默认没有文件夹,所以每个人都可以拼写错误..
  3. 什么时候使用不同分辨率的图标没有意义?我无法想象有人不想要尽可能高的分辨率..

来自 我有些困惑:

The mipmap folders are for placing your app icons in only.

这是什么意思?从 google 翻译我得到:

icon: a symbol or graphic representation on a screen of a program, option, or window, especially one of several for selection.

mipmap 和 drawable 文件夹的不同用途

通过查看 official google documentations of the resource folder (res/),我终于了解了 mipmap 和 drawable 文件夹之间的区别用途。

他们说什么时候使用 mipmap:

Drawable files for different launcher icon densities. For more information on managing launcher icons with mipmap/ folders, see Managing Projects Overview.

以及何时将内容放入可绘制文件夹中:

Bitmap files (.png, .9.png, .jpg, .gif) or XML files that are compiled into the following drawable resource subtypes:

Bitmap files

  • List item
  • Nine-Patches (re-sizable bitmaps)
  • State lists Shapes Animation
  • drawables
  • Other drawables
  • See Drawable Resources

附加到文件夹名称的限定符在 android

中具有特殊含义

同样值得注意的是,启动器图标默认有多个不同分辨率的文件夹,但可绘制文件夹没有。 Android OS 查找这些具有特殊名称的文件夹,称为限定符。 例如,对于可绘制文件夹,有这些限定符和更多:

  • ldpi
  • hdpi
  • xdpi

这些限定符附加到这些资源文件夹名称,如 drawable-ldpi、drawable-hdpi 和 drawable-xdpi,因此 android 操作系统将查看这些文件夹以找到文件的最佳分辨率文件夹。


回答上面的问题:

  1. 人们在实际指的是启动器图标时会错误地使用术语图标。启动器图标应放置在 mipmap 中并且默认存在。
  2. mipmap 中不应放置启动器图标以外的任何内容
  3. Android 提供 configuration qualifiers 以便更轻松地根据屏幕分辨率和屏幕方向等特定设备设置更改应用程序。包含不同尺寸的版本很有意义,因为缩小和放大可以更准确地完成以适应所有类型的屏幕尺寸。

希望这对任何人都有帮助。我发现这个很难找到。

https://developer.android.com/training/multiscreen/screendensities#mipmap 根据官方文件, Mipmap 应该用于启动器图标。可以将其他可绘制对象添加到特定于密度的可绘制对象文件夹中。