好像有挺久时间没更新博客了,最近我为了准备下一个系列的博客,也是花了很长的时间研读源码。...很遗憾的是,下一个系列的博客我可能还要再过一段时间才能写出来,那么为了不至于让大家等太久,今天就给大家更新一篇单篇的文章,讲一讲Android drawable方面的微技巧。...怎么会有这么多mipmap开头的文件夹,而且它们的命名规则和drawable文件夹很相似,也是hdpi、mdpi、xhdpi等等,并且里面还真是放的图片,难道Android项目中放置图片的位置已经改了?...没错,这个就是现实情况,那么在这种情况下,我们应该将仅有的这一套图片资源放在哪个密度的文件夹下呢?...那么经过上面一系列的分析,答案自然也就出来了,图片资源应该尽量放在高密度文件夹下,这样可以节省图片的内存开支,而UI在设计图片的时候也应该尽量面向高密度屏幕的设备来进行设计。
ldpi: 屏幕密度为120的手机设备 mdpi: 屏幕密度为160的手机设备(此为baseline,其他均以此为基准,在此设备上,1dp = 1px) hdpi: 屏幕密度为240的手机设备 xhdpi...: 屏幕密度为320的手机设备 xxhdpi:屏幕密度为480的手机设备 如果是320x240的切图,则应该放在drawable-ldpi目录下。...如果是480x320的切图,则应该放在drawable-mdpi目录下。...如果是800x480的切图,则应该放入drawable-hdpi目录下, 如果是1280x720的切图,则应该放在drawable-xhdpi目录下。...android手机先根据当前分辨率选择最近的一个文件夹读取,比如你可以把1080P放在hdpi中,那么高分辨率手机先读hdpi这里面的,没有就找mdpi,依次类推。
Drawable - 作为Android平下通用的图形对象,它可以装载常用格式的图像,比如GIF、PNG、JPG,当然也支持BMP,当然还提供一些高级的可视化对象,比如渐变、图形等。...大部分人都把的图片放在drawable—mdpi中。 在分辨率低于480*800时把图片放在drawable—mdpi中是不会有什么影响,但是当分辨率为420*800或高于它时就会出问题了。...比如手机屏幕的大小为420*800如果你将图片放在drawable—mdpi中,那么你就要准备一张340*525分辨率的图片。...layout-640×360 根据屏幕尺寸 layout-xhdpi 根据屏幕尺寸 layout-xhdpi-v19 根据屏幕尺寸和sdk版本 2)hdpi、mdpi、ldpi 在之前的版本中,只有一个...drawable,而2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三个,这三个主要是为了支持多分辨率。
Android手机适配是非常让人头疼的一件事,尤其是图片,android为了做到是适配提供了很多文件夹来存放不同大小的图片,比如:drawable-ldpi、drawable-mdpi、drawable-hdpi...、drawable-xhdpi、drawable-xxhdpi等,其实同一张内容的图片放到上面不同的文件夹中是有区别的,可能你会问:如果在上述各个文件夹中都放置一张内容相同,尺寸不同的图片,那么系统会选择加载哪一张图片呢...ldpi: 屏幕密度为120的手机设备 mdpi: 屏幕密度为160的手机设备(此为baseline,其他均以此为基准,在此设备上,1dp = 1px) hdpi: 屏幕密度为240的手机设备 xhdpi...图片放在drawable中,等同于放在drawable-mdpi中,原因为:drawable目录不具有屏幕密度特性,所以采用基准值,即mdpi 图片放在某个特定drawable中,比如drawable-hdpi...,如果设备的屏幕密度高于当前drawable目录所代表的密度,则图片会被放大,否则会被缩小,放大或缩小比例 = 设备屏幕密度 / drawable目录所代表的屏幕密度 为了更全面的适配所有设备,我们应该提供一套针对主流屏幕密度的图片
但是你可以在所有的设备上通过为每个图标提供多尺寸 来为你的图标提供更好的视觉效果。当你的app运行时,安卓检查设备屏幕的特性并且加载适当的指定密度的你app中的资源文件。...注意: 安卓也支持 低密度(low-density LDPI),但是一般情况下不要以这个尺寸创建自定义的资源,因为会有效的向下缩放 1/2 倍 你的HDPI资源来匹配期望的大小。...例如,启动图标是 48,72,96,或者144像素宽度的,依赖于不同的屏幕密度(mdpi, hdpi, xhdpi, and xxhdpi, 分别的)。...帮助保持多份拷贝的文件的安全和容易去找到,我们建议 在你的工作空间 创建一个 基于目标屏幕密度来组织资源文件的文件夹结构。例如: art/... mdpi/......为了比较,下面是在一个经典的应用程序中的资源文件夹的结构: res/... drawable-ldpi/... finished_asset.png drawable-mdpi/... finished_asset.png
中添加子元素 android:anyDensity="true"时,应用程序安装在不同密度的终端上时,程序会分别加载xxhdpi、xhdpi、hdpi、mdpi、ldpi文件夹中的资源。...相反,如果设为false,即使在文件夹下拥有相同资源,应用不会自动地去相应文件夹下寻找资源: 如果drawable-hdpi、drawable-mdpi、drawable-ldpi三个文件夹中有同一张图片资源的不同密度表示...,那么系统会去加载drawable_mdpi文件夹中的资源; 如果drawable-hpdi中有高密度图片,其它两个文件夹中没有对应图片资源,那么系统会去加载drawable-hdpi中的资源,其他同理...; 如果drawable-hdpi,drawable-mdpi中有图片资源,drawable-ldpi中没有,系统会加载drawable-mdpi中的资源,其他同理,使用最接近的密度级别。...2.1.2 横屏竖屏目录区分 drawable a) drawable-hdpi该图片即适用于横屏,也适用于竖屏; b) drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹的资源
有四种一般的尺寸: 小,一般大,大,超大 还有四种一般的像素密度: 低 (ldpi), 中 (mdpi), 高 (hdpi), 超高 (xhdpi) 为了声明你想要使用在不同屏幕上的布局和位图...创建不同的布局 ---- 为了在不同的屏幕尺寸上优化你的用户体验,你应该为每一个你想要支持的屏幕尺寸创建单独的文件 ....更多的信息,见 设计用于多种屏幕 . 创建不同的位图 ---- 你应该针对一般的项目密度类型提供位图资源的恰当缩放版本: 低的, 中的, 高的 和 超高的项目密度 ....为了生成这些图像,你应该从矢量格式的源生资源开始,使用如下尺寸范围为每一种项目密度生成图像 : xhdpi: 2.0 hdpi: 1.5 mdpi: 1.0 (基线) ldpi: 0.75...这就意味着如果你为xhdpi设备生成了一张 200x200 图片,你就应该用 150x150 为hdpi , 100x100 为 pi, 以及 75x75 为ldpi设备生成同样的资源 .
背景 资源本身是很简单的,我们可以理解为一个文件,但是,Android 天生为兼容各种各样不同的设备做了相当多的工作,比如屏幕大小、国际化、键盘、像素密度等等。...其实二进制的资源(比如图片)是不需要编译的,只不过这个“编译”的行为,是为了生成 resources.arsc 以及对 xml 文件进行二进制化等操作,resources.arsc 是上面说的表,xml...我们顺便来看下一个用 Android Studio 新建出来的 apk 吧,为了简单,我暂时去除了 support library,因为会引入非常多的资源,我们使用aapt2 dump,得到如下: Binary...) (file) res/mipmap-mdpi-v4/ic_launcher.png type=PNG (hdpi) (file) res/mipmap-hdpi-v4/ic_launcher.png...) (file) res/mipmap-mdpi-v4/ic_launcher_round.png type=PNG (hdpi) (file) res/mipmap-hdpi-v4/ic_launcher_round.png
extra high)(普通屏幕:ldpi是120,mdpi是160,hdpi是240,xhdpi是320) 三、如何做到自适应屏幕大小呢?...需要根据dpi值准备5套图片资源,drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi Android有个自动匹配机制去选择对应的布局和图片资源...2、切图方面: 长宽最好是3的倍数(根据android的推荐logo图标的大小是48(mdpi),72(hdpi),96(xhdpi)得出的最小公约数)。 长宽最好是偶数。...4、关于图标的目录,480*800切下来的图我们放在drawable-hdpi目录下,按照2:3放大的图标放在drawable-xhdpi目录下,按照2倍放大的图标放在drawable-xxhdpi目录下...demins在value文件夹下,相关配置可以在values-hpdi,values-mdpi,values-ldpi三种文件夹中的dimens.xml文件进行设置。
目前,Android设备的配置种类繁多——不同的屏幕尺寸,分辨率,以及用户使用时的不同的屏幕方向等。为了让自己的程序运行在多种不同的尺寸上都表现良好,Android系统提供了很多有用的方式。...2.4 像素密度 Android中对图片的分类是通过Screen pixel density (像素密度:以dpi为数值单位)进行的,包括ldpi、mdpi、hdpi、xhdpi这四个主要的级别。...对于一个图片,它在不同像素密度级别下的缩放系数如下: xhdpi: 2.0 hdpi: 1.5 mdpi: 1.0 (参考标准) ldpi: 0.75 如果在xhdpi的设备下使用的合适的图片尺寸是200x200...,那么在hdpi下图片应该是150x150,在mdpi下是100x100,在ldpi下是75x75....drawable 资源放在res目录下不同的子目录中——使用不同的像素密度修饰符对应不同的像素密度: drawable-ldpi/ :对应ldpi drawable-mdpi/ :对应mdpi drawable-hdpi
Android的支持多屏幕机制即用为当前设备屏幕提供一种合适的方式来共同管理并解析应用资源。...(320x480) drawable-hdpi:高分辨率的图片,如WVGA (480x800),FWVGA (480x854) drawable-xhdpi:至少960dp x...例如我们在hdpi,mdpi,ldpi文件夹下拥有同一种资源,那么应用也不会自动地去相应文件夹下寻找资源,这种情况都是出现在高密度,以及低密度的手机上,比如说一部240×320像素的手机, 如果设置...对应bitmap 资源来说,自动的缩放有时会造成放大缩小后的图像变得模糊不清,这是就需要应用为不同屏幕密度配置提供不同的资源:为高密度的屏幕提供高清晰度的图像等。...例如,当前为高精度屏幕,平台会加载高精度资源(如HelloAndroid中drawable-hdpi 中的位图资源),如果没有,平台会将中精度资源缩放至高精度,导致图片显示不清晰。
Android碎片化之屏幕适配 现如今,因Android系统的开放性,市场上出现了不同厂商出厂的各种android版本、分辨率、型号等设备。...Android项目的res目录下一般加上我们自己创建的,会有6个目录,分别是:drawble drawble-ldpi drawble-mdpi drawble-hdpi drawble-xhdpi...比如说,如果我们为 xhdpi 设备生成了 200x200 px尺寸的图片,就应该按照相应比例地为 hdpi、mdpi 和 ldpi 设备分别生成 150x150、100x100 和 75x75 尺寸的图片...即一套分辨率=一套位图资源(这个当然是Ui设计师做了) 步骤2:将生成的图片文件放在 res/ 下的相应子目录中(mdpi、hdpi、xhdpi、xxhdpi),系统就会根据运行您应用的设备的屏幕密度自动选择合适的图片...注:如果是.9图或者是不需要多个分辨率的图片,放在drawable文件夹即可,对应分辨率的图片要正确的放在合适的文件夹,否则会造成图片拉伸等问题。
,程序会分别加载xxhdpi、xhdpi、hdpi、mdpi、ldpi文件夹中的资源。...相反,如果设为false,即使在文件夹下拥有相同资源,应用不会自动地去相应文件夹下寻找资源: 1) 如果drawable-hdpi、drawable-mdpi、drawable-ldpi三个文件夹中有同一张图片资源的不同密度表示...,那么系统会去加载drawable_mdpi文件夹中的资源; 2) 如果drawable-hpdi中有高密度图片,其它两个文件夹中没有对应图片资源,那么系统会去加载drawable-hdpi中的资源,其他同理...; 3) 如果drawable-hdpi,drawable-mdpi中有图片资源,drawable-ldpi中没有,系统会加载drawable-mdpi中的资源,其他同理,使用最接近的密度级别。...2.1.2 横屏竖屏目录区分 1) drawable a) drawable-hdpi该图片即适用于横屏,也适用于竖屏; b) drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹的资源
大家都知道,安卓有 mdpi、hdpi、xhdpi后缀的文件,具体使用有 drawable-mdpi、drawable-hdpi,或者mipmap-mdpi、mipmap-hdpi, 又或者 values-mdpi...那么,这些文件都是怎么使用的呢,这又涉及到了屏幕密度这个属性,关联如下: dpi 屏幕密度 drawable-ldpi 0.75 drawable-mdpi 1(baseline) drawable-hdpi...1.5 drawable-xhdpi 2 drawable-xxhdpi 3 drawable-xxxdpi 4 平板A 三星平板5100 的屏幕密度是1.33125,大于mdpi,小于hdpi,向上取整...,所以属于hdpi 平板B 三星平板P355C 的屏幕密度是1,属于mdpi ldpi:mdpi:hdpi:xhdpi:xxhdpi:xxxdpi = 0.75:1:1.5:2:3:4 = 3:4:6:...只需要保证在所有设备中宽的维度上显示一致即可, * 再比如一个不支持上下滑动的页面,那么需要保证在高这个维度上都显示一致 * * @param activity activity
前言 对于一张图片,你知道应该存放在那个资源目录下面吗,或者说,放在那个资源目录下加载起来更省内存呢?...基础知识 MDPI HDPI XHDPI XXHDPI XXXHDPI density(像素密度) 160 240 320 480 640 分辨率 360x640 540x960 720x1280 1080x1920...分为了好几个档次,例如 160,240,320,480 等。...也就是 mdpi 到 hdpi 是 1.5 倍,mdpi 到 xhdpi 是 2倍,以此类推。...图片的来源是 android 的资源文件夹 这种情况下,系统会根据设备的 dpi 值,以及 资源目录的 dpi 值做一次分辨率转换,转换的规律就是:图片宽 * (设备dpi / 对应资源目录 dpi)
在Google官方开发文档中,说明了 mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi=2:3:4:6:8 的尺寸比例进行缩放。...切图应该放哪个 drawable 文件夹下,切多大? UI 应该以什么标准出图? UI 出的标注图 px 和 dp之间如何转换?...举个例子: 某款盒子通过上述代码获得分辨率为1920*1080 ,DPI为160dpi,盒子连接的是4K的电视分辨率为3840*2160: 通过160dpi,根据上表可以得知图片放在drawable-mdpi...文件夹下 在只考虑当前设备的情况下,UI应该以盒子的像素1920*1080出图因为,app 在机顶盒上实际输出的像素就只有1920*1080像素,而在4K电视上4K显示效果是机顶盒将系统UI框架的 1920...,此时我们计算一下宽度的dp值:1080/1.33=812,所以我们图片和资源文件可以放在values-sw812dp和drawable-sw812dp下面。
二、屏幕适配 Android是用尺寸和分辨率这两种常规属性对设备加以分类。在我们开发项目中应该提供一些可选资源,针对尺寸和分别率来优化我们的界面外观。...),高High精度(hdpi), 超高精度(xhdpi) 首先,说一说这个分别率的问题。...image.png 比如,计算方式给xhdpi(2倍图,超高精度)级别的设备生成了一张200200px的图像,那么应该为hdpi生成150150px,为mdpi生成100100px, 为ldpi生成7575px...然后,将这些文件放入相应的drawable资源目录中: MyProject/ res/ drawable-xhdpi/ awesomeimage.png...drawable-hdpi/ awesomeimage.png drawable-mdpi/ awesomeimage.png
Drawable资源目录 drawable文件放在res目录的各个drawable目录下,\res\drawable一般放的是描述性的xml文件,图片文件一般放在具体分辨率的drawable目录下。...例如 drawable-ldpi里面主要放低分辨率的图片,如QVGA(240×320) drawable-mdpi里面主要放中等分辨率的图片,如HVGA(320×480) drawable-hdpi...如果各目录存在同名图片,则Android会根据手机的分辨率来分别适配对应文件夹里的图片。所以在开发APP时,为了兼容不同的手机屏幕,根据需求在不同目录存放不同大小的图片,才能达到最合适的显示效果。...比如说,我在drawable-hdpi放了一张背景图片bg.png(分辨率480×800),其他目录就没放,使用分辨率480×800的手机查看该APP是没有问题的,但是现在有一台分辨率高的手机如720×...StateListDrawable是在一个xml文件中定义不同状态下呈现的图像。 下面是一个例子btn_visit_selector.xml <?
Android 将所有屏幕密度分为六组通用密度:ldpi( 低)、mdpi(中)、hdpi(高)、xhdpi(超高)、xxhdpi(超超高)和xxxhdpi(超超超高)。...Android 将所有屏幕密度分为六组通用密度:ldpi( 低)、mdpi(中)、hdpi(高)、xhdpi(超高)、xxhdpi(超超高)和xxxhdpi(超超超高)。...Android系统支持4种格式的像素格式,源码在Bitmap.Config中: 为了保证图片质量,官方默认使用ARGB_8888格式,导致图片的每个像素会占用4个Byte大小,所以demo里面的图片占用内存大小就是像素总数...2、静态图片区分文件夹内存占用现象 (1) 静态图片区分文件夹在X21(Android 8.0)上的内存占用 那么问题又来了,放在res/drawable-nodpi/文件夹下没问题,放在其他文件夹下呢...可以看到, 对于分辨率为res/drawable-hdpi/、res/drawable-xhdpi/、res/drawable-xxdpi/三个分辨率来说,图片占据内存基本是一致的,Java层内存没有消耗
即使有时内存申请 很小,它们仍然会给应用程序的堆内存造成压力,还是会启动垃圾回收,在 GC 频繁的工作过程中消耗了非常多的时间,并且可能导致卡顿。...图标定义在 res 下的 drawable-hdpi/drawable-mdpi/drawable-xhdpi/drawable-xxhdpi/drawable-xxxhdpi 里,名为 __leak_canary_icon.png...120 res/drawable-mdpi 160 res/drawable-xhdpi 320 res/drawable-xxhdpi 480 加载资源图片时,会先算出屏幕密度,然后再到对应的资源目录下寻找图片...比如一张图片只放在了 res/drawable-mdpi,但当前设备密度是 480,那么系统会将这张图片放大 3 倍加载到内存。...res/drawable 在不同的设备下会被替换成不同的密度,即系统本身的默认密度。
领取专属 10元无门槛券
手把手带您无忧上云