【问题标题】:Confusion about drawable and mipmap in Android Studio from older example in book书中旧示例中关于 Android Studio 中可绘制和 mipmap 的混淆
【发布时间】:2023-12-27 04:05:01
【问题描述】:

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

Android Programming - The Big Nerd Ranch Guide 一书中有一个示例,我必须在 Button 上的某些文本旁边插入一个图标。对于更高分辨率的屏幕,包含多种尺寸的图标是有意义的。在他们的解决方案中,他们将所有图像放在许多不同的 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文件夹中只能放app图标,是这样吗?什么是应用程序图标?其他人说只有启动器图标应该放在那里,而还有一些人说只有图标应该放在那里。是哪一个,它们是互斥的选项!
  2. 我无法自动完成到 Android Studio 中的 mipmap 文件夹中,这让我认为我必须将所有内容放入我的可绘制文件夹中,因为 Android Studio 会为我自动完成。但是,默认情况下可绘制文件夹没有子文件夹。这让我相信drawable文件夹不应该再用于不同分辨率的图像,因为为什么默认是没有文件夹,所以每个人都会犯拼写错误..
  3. 什么时候让不同分辨率的图标没有意义?我无法想象有人不想要尽可能高的分辨率..

来自here 我有些困惑:

mipmap 文件夹仅用于放置您的应用程序图标。

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

图标:程序、选项或窗口屏幕上的符号或图形表示,尤其是可供选择的几个之一。

【问题讨论】:

  • "人们常说mipmap文件夹中只能放app图标,是这样吗?" ——“总是”是一个强有力的术语。然而,这就是惯例。 “什么是应用程序图标?” -- 您从清单中的android:icon 属性中引用的图标。 “默认情况下,drawable 文件夹没有子文件夹”——没有资源目录有子目录。
  • Gradle 允许您在构建 APK 之前剥离某些资源组。例如,您的项目可以包含 drawable-xxxhdpi 图像,但生成的 APK 不会(如果您愿意)。另一方面,mipmap 将始终被打包(因此mipmap-xxxhdpi 中的图像将安全地进入 APK)。
  • 谢谢你们!慢慢地,我开始了解它的工作方式..

标签: java android drawable android-drawable mipmaps


【解决方案1】:

mipmap和drawable文件夹的不同用途

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

他们说什么时候使用 mipmap:

不同启动器图标密度的可绘制文件。有关使用 mipmap/ 文件夹管理启动器图标的更多信息,请参阅管理项目概述。

什么时候在你的drawable文件夹中放一些东西:

编译的位图文件(.png、.9.png、.jpg、.gif)或 XML 文件 分为以下可绘制资源子类型:

位图文件

  • 列表项
  • 九个补丁(可调整大小的位图)
  • 状态列表形状 动画
  • 绘图
  • 其他可绘制对象
  • 查看可绘制资源

附加到文件夹名称的限定符在 android 中具有特殊含义

另外值得注意的是,默认情况下,启动器图标有多个具有不同分辨率的文件夹,但对于可绘制文件夹,则没有。 Android 操作系统会查找这些具有特殊名称的文件夹,称为限定符。 例如,对于可绘制文件夹,有这些限定符等等:

  • ldpi
  • hdpi
  • xdpi

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


回答以上问题:

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

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

【讨论】:

  • 所以 mipmaps 仅用于启动器图标,而 drawables 用于整个项目应用程序中使用的图像?
【解决方案2】:

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

【讨论】:

    最近更新 更多