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 drawable与mipmap的区别(android资源文件放置位置)的更多相关文章

  1. Android Studio下通过Gradle配置实现资源文件的模块化

    当开发一个app模块个数很多的时候,资源文件就会特别多,布局也会多起来,这时所有的layout都放在同一个目录下,就会显得臃肿,而且不好找相应的布局. 最近看到相关资料,发现在Android Stud ...

  2. SpringBoot 指定资源文件的位置

    SpringBoot默认的存放静态资源文件的位置是在: 里面的. 注:SpringBoot中的src/main/resources/资源文件夹对应classpath:. 默认存放静态资源文件的位置,在 ...

  3. Android学习笔记主题(Theme)资源文件

    安卓的主题资源文件,可以用于对Android应用的美化. styles文件是主题资源文件. 定义一个主题资源格式如下: <resources> <!-- Base applicati ...

  4. Android ROM资源文件存放位置

    位于目录:framework/core/res/res /frameworks/base/core/res/res/values/public.xml 上面的文件中公开了上层(也就是第三方应用或者系统 ...

  5. springboot整合mybatis。mapper.xml资源文件放置到resources文件夹下的配置&别名使用配置

  6. 【Android】drawable VS mipmap

    Android Studio 创建工程后默认的资源文件夹如下图所示: 一直有些疑惑的是 mipmap 和 drawable 文件夹有什么区别,以及是否还需要创建 drawable-xhdpi, dra ...

  7. Android Drawable 详解(教你画画!)

    参考 1.Android中的Drawable基础与自定义Drawable 2.android中的drawable资源 3.Android开发之Shape详细解读 Drawable分类 No xml标签 ...

  8. Android资源文件简介

    Android资源文件简介 1. Android应用资源的作用 (1) Android项目中文件分类 在Android工程中, 文件主要分为下面几类 : 界面布局文件, Java src源文件, 资源 ...

  9. android源码framework下添加新资源的方法

    编译带有资源的jar包,需要更改frameworks层,方法如下: 一.增加png类型的图片资源 1.将appupdate模块所有用到的png格式图片拷贝到framework/base/core/re ...

  10. Android资源文件及文件夹介绍

    在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的 1:assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片, ...

随机推荐

  1. openAI发布v0.2.0了

    时隔20天,OpenAI从v0.0.1升级到了v0.2.0.与v0.0.1版相比,v0.2.0版主要做了以下改动: 把cmd目录下微信公众号的相关服务迁移到了这里 完善了cmd下的测试服务,针对ope ...

  2. TienChin 引入 MyBatisPlus

    在父工程当中添加版本号,统一管理: <mybatis-plus.version>3.5.1</mybatis-plus.version> 在父工程当中添加 MyBatisPlu ...

  3. 强化学习从基础到进阶-案例与实践[5.1]:Policy Gradient策略梯度-Cart pole游戏展示

    强化学习从基础到进阶-案例与实践[5.1]:Policy Gradient策略梯度-Cart pole游戏展示 强化学习(Reinforcement learning,简称RL)是机器学习中的一个领域 ...

  4. SpringCloud-02-Nacos注册中心

    Nacos注册中心 1.认识Nacos Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件.相比Eureka功能更加丰富,在国内受欢迎程度较高. 2.安装Nacos 1 1.下载安装 ...

  5. PCIe Gen 4 SSD主控大盘点:7000MB/s高速时代,到底谁能称王?

    [硬件编年史]自2006年世界上第一款搭载固态硬盘的电脑诞生之后,消费级SSD经过十几年的发展,从一开始的SATA 6Gbps SSD,到坚挺了十年的PCIe Gen 3 SSD,再到PCIe Gen ...

  6. 神奇的 SQL ,同时实现小计与合计,阁下该如何应对

    开心一刻 今天,小区有个很漂亮的姑娘出嫁 我对儿子说:你要好好学习,认真写作业,以后才能娶到这么漂亮的老婆 儿子好像听明白了,思考了一会,默默的收起了作业本 然后如释重负的跟我说到:爸,我以后还是不娶 ...

  7. (C语言)格式输出,右对齐

    printf("%8d", i);可以输出整数 i,让它占至少 8 个字符的宽度(即场宽为8):如果 i 不够8 位则在左边补空格使它右对齐满 8 位,如果 i 的输出的位数 ≥ ...

  8. 下载、安装Git并拷贝GitHub项目到本地的流程

      本文介绍分布式开源版本控制系统Git的下载.安装,并基于Git实现克隆GitHub中项目代码的方法.   Git是一款开源软件,因此我们直接在Git的官方下载地址下载最新版本的Git即可.其中,在 ...

  9. java的char类型,只有两个字节,为什么可以存储汉字?java中 char详解

    我自己出了一道面试题,如下: public static void main(String[] args) { char a = '9'; char b = 9; char c = '我'; Syst ...

  10. NC20185 [JSOI2010]缓存交换

    题目链接 题目 题目描述 在计算机中,CPU只能和高速缓存Cache直接交换数据.当所需的内存单元不在Cache中时,则需要从主存里把数据调入Cache.此时,如果Cache容量已满,则必须先从中删除 ...