drawable与mipmap的区别(android资源文件放置位置)

本文解析了Android开发中drawable与mipmap的区别及应用场景,并给出了资源放置的最佳实践。强调mipmap主要用于应用图标,而drawable则适用于其他图标资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在网上浏览博客,看到这一个问题,我们的图片资源到底放在drawable还是mipmap目录中,网上的争议很大,
今天打算就我的观点说一下这个问题,如果我的回答让大神们有所质疑,希望多多提点。
首先我们应该知道他们的意义:
1.Drawable
Android 把可绘制的对象抽象为Drawable,不同的图形图像代表着不同的darwable类型,
通常我们在代码中不会直接接触drawable实现类的,是由android FrameWork提供了一些
具体的drawable的实现。
我们在实际开发中,会把drawable的资源放在res/drawable目录上,当需要使用图片资源时
可以通过@drawable或者id引入这些drawable资源
drawable是默认共享的,不同的地方使用了相同资源drawable,他们会指向相同的资源,相同
的状态,如果drawable被修改了,其他都被修改了,

2.mipmap
在使用android Studio 创建项目的时候,常常会看到系统吧ic_launcher.png图片放在mipmap-xxhdpi
目录下,mip来源于拉丁文中的mulium in parvo 意为在一个小空间的多数,MIP map是一种电脑图形图像技术,用于在三维图像的二维代替物中达到立体感效果
mipmap目录的图标会忽略屏幕密度,回去匹配大一点的,然后系统自动对图片进行缩放,从而优化显示和节省资源。官方建议如下类型的图片资源放在mipmap目录:
launcher icons
action bar and tab icons
Notification icons

3.针对于drawable 与 mipmap都有了一定的认识,那么我们在实际开发中,到底把图片资源放在drawable下还是mipmap下?
答案:mipmap文件夹方应用图标,其实需要使用drawable资源像之前一样对应的放到drawable文件夹,
根据这篇google的博文: 
It’s best practice to place your app icons in mipmap- folders (not the drawable- folders) because they are used at resolutions different from the device’s current density. 
应用的启动图标最好放到mipmap文件夹(不是drawable文件夹),因为它们用在不同分辨率的设备上。 
When referencing the mipmap- folders ensure you are using the following reference: 
当引用mipmap文件夹的资源时,需要使用下面的方式:
android:icon="@mipmap/ic_launcher"
结论: 
mipmap仅仅用于应用启动图标,可以根据不同分辨率进行优化。其他的图标资源,还是要放到drawable文件夹中。

Android 官方解释[3]:
Note: You should place all launcher icons in the res/mipmap-[density]/ folders, rather than drawable/ folders to ensure launcher apps use the best resolution icon. 
注意:你应当将虽有启动图标放到res/mipmap-[density]/文件夹中,而不是drawable/文件夹,来确保启动图片使用最好的分辨率图标。

在网上查阅两道面试题,希望能加深一下大家的印象:
Android资源目录的读取顺序?
Android资源文件可以定义在不同分辨率、屏幕方向、语言等(甚至还有夜间模式),当我们的应用需要使用一个资源,这个资源(图片、Layout或者别的)可能在很多res下的子目录中都存在,那么Android系统是如何确认使用哪一个资源呢?
这就是一个Android应用的资源查找的顺序问题,其实简单说,在查找时会先去掉有冲突的资源目录(上图第1步),然后再按MCC、MNC、语言等指定的优先级进行查找,直到确认一个匹配资源。根据屏幕尺寸限定符选择资源时,如果没有更好的匹配资源,则系统将使用专为小于当前屏幕的屏幕而设计的资源。
图片放错目录会产生的问题吗?
这一点可能很多人都不会注意,觉得只要往一个drawable目录中放了需要的资源就好了。而我们可以自己做一个简单的测试,把同一个图片资源放在不同的dpi目录,会发现它们使用的内存是不一样的。简单说就是高密度(density)的系统去使用低密度目录下的图片资源时,会将图片长宽自动放大以去适应高密度的精度,当然图片占用的内存会更大。
所以如果能提各种dpi的对应资源那是最好,可以达到较好内存使用效果。如果提供的图片资源有限,那么图片资源应该尽量放在高密度文件夹下,这样可以节省图片的内存开支。
### 如何在Android Studio中创建和使用Drawable资源文件 #### 创建Drawable资源文件夹 当首次启动一个新的Android Studio项目时,默认情况下仅提供`drawable`文件夹以及一系列`mipmap`文件夹用于存储应用图标[^1]。为了支持多种屏幕密度并优化图像显示效果,开发者通常还需要额外创建特定于不同分辨率的`drawable`子文件夹。 要创建这些专门针对各种屏幕密度设计的`drawable`文件夹: - 右键点击项目的`res`目录; - 选择菜单项 `New -> Android Resource Directory`; - 在弹出窗口内指定目标配置为所需的像素密度选项(例如`mdpi`, `hdpi`, `xhdpi`等),之后确认即可完成新文件夹的添加过程[^2][^3]. 此方式不仅简化了操作流程而且确保遵循官方推荐的最佳实践标准。 #### 使用Drawable资源文件 一旦建立了合适的`drawable`文件夹结构,就可以按照设备的具体需求放置适当大小版本的图形素材。这有助于提高用户体验质量的同时减少不必要的内存占用。具体做法是在对应分辨率级别的文件夹里入适配该级别屏幕尺寸的图片文件。比如一张背景图应当分别制作成适合各档位屏幕清晰度的不同副本,并命名为相同的名字存入相应的文件夹中[^4]。 ```xml <!-- Example of referencing a drawable resource --> <ImageView android:src="@drawable/my_image"/> ``` 通过上述XML片段展示了一个简单的例子,说明怎样在一个布局定义里引用位于某个`drawable`文件夹下的资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值