Android 项目中软件图标适配和mipmap文件夹的规则

参考:Android开发使用mipmap文件夹的正确姿势: px 、dpi 、dp

软件图标的适配

Android应用图标微技巧,8.0系统中应用图标的适配

系统会优先选用android:roundIcon="@mipmap/ic_img"属性对应的图片

测试的在华为手机Android 9.0系统中,但是在切换targetSdkVersion 大于26和小于26的时候,并没有对图标进行原型切换,26前后对应的图标形状一样。可能是华为对这部分源码进行了修改,将mask层修改为圆角矩形。

图标

在pixel2手机上的图标效果,切换targetSdkVersion 大于26和小于26的时候显示效果都是一样的。如下图:
image.png

mipmap中几个文件夹的认识

mipmap中的文件夹分别为

mipmap-lhdpi
mipmap-mdpi
mipmap-hdpi
mipmap-xhdpi
mipmap-xxhdpi
mipmap-xxxhdpi

新创建的项目都会有这几个文件夹,那么这几个文件夹是怎样的呢?内部的规则是什么呢?都是怎样对应的呢?
讲解这些之前我们需要知道我们平常见到的一些尺寸单位的关系:

  • px 像素点
  • dpi 每一英寸像素点的密度。(看到dpi了,mipmap中的文件夹好像都以dpi结尾,应该是有点关系的)
  • dp 设备无关像素,可以说是根据dpi的不同而不同;
  • pt 1pt=1/72 in(in是英寸) 1pt相当于1/72英寸
  • sp 文字使用的单位,与设备硬件有关

px(像素点)和dpi(像素单位密度)之间的换算公式是:

像素密度=√{(长度像素数^2 + 宽度像素数^2)}/ 屏幕尺寸

px,dpidp之间关系:

每一个设备的dpi是固定的,但是Android的机型太多了,每个机型都可能有自己的dpi,我们在换算这三个单位的时候是以160为基准的。比如说当dpi160的话,那么1px=1dp;如果dpi320的话,1px=0.5dp。它们之间的换算公式为 px=dp*(dpi/160)

上边一些尺寸的基础知识,感觉很乱啊。。。
接下来就将一下mipmap下边几个文件夹的关系 表1-1:

mipmap-lhdpi mipmap-mdpi mipmap-hdpi mipmap-xhdpi mipmap-xxhdpi mipmap-xxxhdpi
dpi范围 (0-120]dpi (120-160]dpi (160-240]dpi (240-320]dpi (320-480]dpi (480-640]dpi
1dp对应px(luffy) 0.75 1 1.5 2 3 4

上边dp对应px的比值我起名为(luffy)
我们在开发的过程中,对图片的展示通常就两种:固定宽高,不固定宽高。
固定宽高会遇到的问题是放置的图片可能会模糊;不固定宽高可能就会和自己想要的尺寸不一样了。
我现在以不固定宽高的来说,比如给一个TextView设置dropLeft,这样就不能设置宽高,那么ui给的图片我到底该放置到哪个dpi文件夹里边才合适呢。因为我开发的是特定机器上的app,所以只需要一个mipmap文件夹就行了。
我现在将一张32 * 32的图片分别放到这六个文件夹里边,不固定尺寸的显示图片,并通过方法获取图片的宽高,测试机器的dpi480
记住两个数据:图片尺寸是32 * 32;测试机是480dpi
结果如下 表1-2:

mipmap-lhdpi mipmap-mdpi mipmap-hdpi mipmap-xhdpi mipmap-xxhdpi mipmap-xxxhdpi
dpi范围 (0-120]dpi (120-160]dpi (160-240]dpi (240-320]dpi (320-480]dpi (480-640]dpi
1dp对应px(luffy) 0.75 1 1.5 2 3 4
图片展示宽高(px) 128*128 96*96 64*64 48*48 32*32 24*24

结果是同一张图片放到不同的文件夹中,显示的尺寸是不一样的,因为测试机是480dpi,对应的本命mipmap文件夹是mipmap-xxhdpi,所以这个文件夹中的图片在这个测试机上都会原尺寸显示。其他的文件夹中的图片都会根据1-2表格中的dp和px的换算比例进行换算。比如,1-2表中mipmap-xxhdpi对应的luffy3mipmap-hdpiluffy值是1.5,如果我们将32 * 32的图片放到mipmap-hdpi文件夹中,其他文件夹中不放置,软件展示图片的时候就会获取mipmap-hdpi文件夹中的图片,显示的效果我们知道是64 * 64,再看对应着刚说的luffy值,是不是看出点什么?好像不同文件夹中的图片显示的效果和luffy值有关啊。

(图片真实尺寸*测试机对应的本命mipmap文件夹中的luffy值)/当前mipmap文件夹中的luffy值=显示到屏幕上的尺寸

比如 ,当将图片放置到mipmap-hdpi 文件夹中:

(32 * 3)/1.5=64
其中32为图片尺寸,3为当前我是用的测试机的luffy值,1.5mipmap-hdpiluffy值。

那么如果我们想不管从哪个文件夹获取图片,展示的都是32*32,那好说啊,按照这个公式,获取不同文件夹中需要放置的图片尺寸。比如mipmap-hdpi放置16 * 16的图片,就可以在我的测试机上展示32 * 32的效果了。

声明一下,手机上的app开发没有这个需求,我只是找出这几个文件夹中的关系。

我上边一直说的展示尺寸都是px,那么在不同的机器上同时展示32 * 32的效果,根据上边的公式可以实现,但是展示的效果肯定各不相同。
上边的需求是我在做特定机器时,只有一种分辨率,一种dpi,那我想把所有mipmap文件夹都塞满,而且展示的效果都一样,就需要上边的公式。

手机上mipmap文件夹中图片放置规则

当手机上不同的机器,不同的dpi展示同一种效果时,也就是占用屏幕相同的比例时,那表示这个效果的值就是dp,相同的dp在不同的机器上展示的效果基本相同,比如我想在480dpi的机器上展示的效果要和320dpi一样,那就需要它们展示的dp一样,我们展示一个32dp*32dp的图片。根据公式: px=dp*(dpi/160)可以得到 32 * luffy=?px;那么480dpi对应的luffy值是3,所以480dpi对应的mipmap中的图片尺寸是96px * 96px ,320dpi对应的mipmap中的尺寸是64 * 64

要在不同的机器上展示32dp*32dp的图片一张表格展示: 1-3

mipmap-lhdpi mipmap-mdpi mipmap-hdpi mipmap-xhdpi mipmap-xxhdpi mipmap-xxxhdpi
dpi范围 (0-120]dpi (120-160]dpi (160-240]dpi (240-320]dpi (320-480]dpi (480-640]dpi
1dp对应px(luffy) 0.75 1 1.5 2 3 4
所需图片的尺寸(px) 24*24 32*32 48*48 64*64 96*96 128*128

其他dp的图片都可以按照这个规则展示。

mipmap文件夹图片优先使用规则

当合适的mipmap文件夹中没有对应的图片的时候,会优先往高的找,会优先找最近的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335