Android 項(xiàng)目中軟件圖標(biāo)適配和mipmap文件夾的規(guī)則

參考:Android開發(fā)使用mipmap文件夾的正確姿勢(shì): px 、dpi 、dp

軟件圖標(biāo)的適配

Android應(yīng)用圖標(biāo)微技巧,8.0系統(tǒng)中應(yīng)用圖標(biāo)的適配

系統(tǒng)會(huì)優(yōu)先選用android:roundIcon="@mipmap/ic_img"屬性對(duì)應(yīng)的圖片

測(cè)試的在華為手機(jī)Android 9.0系統(tǒng)中,但是在切換targetSdkVersion 大于26和小于26的時(shí)候,并沒有對(duì)圖標(biāo)進(jìn)行原型切換,26前后對(duì)應(yīng)的圖標(biāo)形狀一樣??赡苁侨A為對(duì)這部分源碼進(jìn)行了修改,將mask層修改為圓角矩形。

圖標(biāo)

在pixel2手機(jī)上的圖標(biāo)效果,切換targetSdkVersion 大于26和小于26的時(shí)候顯示效果都是一樣的。如下圖:
image.png

mipmap中幾個(gè)文件夾的認(rèn)識(shí)

mipmap中的文件夾分別為

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

新創(chuàng)建的項(xiàng)目都會(huì)有這幾個(gè)文件夾,那么這幾個(gè)文件夾是怎樣的呢?內(nèi)部的規(guī)則是什么呢?都是怎樣對(duì)應(yīng)的呢?
講解這些之前我們需要知道我們平常見到的一些尺寸單位的關(guān)系:

  • px 像素點(diǎn)
  • dpi 每一英寸像素點(diǎn)的密度。(看到dpi了,mipmap中的文件夾好像都以dpi結(jié)尾,應(yīng)該是有點(diǎn)關(guān)系的)
  • dp 設(shè)備無關(guān)像素,可以說是根據(jù)dpi的不同而不同;
  • pt 1pt=1/72 in(in是英寸) 1pt相當(dāng)于1/72英寸
  • sp 文字使用的單位,與設(shè)備硬件有關(guān)

px(像素點(diǎn))和dpi(像素單位密度)之間的換算公式是:

像素密度=√{(長度像素?cái)?shù)^2 + 寬度像素?cái)?shù)^2)}/ 屏幕尺寸

px,dpidp之間關(guān)系:

每一個(gè)設(shè)備的dpi是固定的,但是Android的機(jī)型太多了,每個(gè)機(jī)型都可能有自己的dpi,我們?cè)趽Q算這三個(gè)單位的時(shí)候是以160為基準(zhǔn)的。比如說當(dāng)dpi160的話,那么1px=1dp;如果dpi320的話,1px=0.5dp。它們之間的換算公式為 px=dp*(dpi/160)

上邊一些尺寸的基礎(chǔ)知識(shí),感覺很亂啊。。。
接下來就將一下mipmap下邊幾個(gè)文件夾的關(guān)系 表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對(duì)應(yīng)px(luffy) 0.75 1 1.5 2 3 4

上邊dp對(duì)應(yīng)px的比值我起名為(luffy)。
我們?cè)陂_發(fā)的過程中,對(duì)圖片的展示通常就兩種:固定寬高,不固定寬高。
固定寬高會(huì)遇到的問題是放置的圖片可能會(huì)模糊;不固定寬高可能就會(huì)和自己想要的尺寸不一樣了。
我現(xiàn)在以不固定寬高的來說,比如給一個(gè)TextView設(shè)置dropLeft,這樣就不能設(shè)置寬高,那么ui給的圖片我到底該放置到哪個(gè)dpi文件夾里邊才合適呢。因?yàn)槲议_發(fā)的是特定機(jī)器上的app,所以只需要一個(gè)mipmap文件夾就行了。
我現(xiàn)在將一張32 * 32的圖片分別放到這六個(gè)文件夾里邊,不固定尺寸的顯示圖片,并通過方法獲取圖片的寬高,測(cè)試機(jī)器的dpi480。
記住兩個(gè)數(shù)據(jù):圖片尺寸是32 * 32;測(cè)試機(jī)是480dpi。
結(jié)果如下 表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對(duì)應(yīng)px(luffy) 0.75 1 1.5 2 3 4
圖片展示寬高(px) 128*128 96*96 64*64 48*48 32*32 24*24

結(jié)果是同一張圖片放到不同的文件夾中,顯示的尺寸是不一樣的,因?yàn)闇y(cè)試機(jī)是480dpi,對(duì)應(yīng)的本命mipmap文件夾是mipmap-xxhdpi,所以這個(gè)文件夾中的圖片在這個(gè)測(cè)試機(jī)上都會(huì)原尺寸顯示。其他的文件夾中的圖片都會(huì)根據(jù)1-2表格中的dp和px的換算比例進(jìn)行換算。比如,1-2表中mipmap-xxhdpi對(duì)應(yīng)的luffy3,mipmap-hdpiluffy值是1.5,如果我們將32 * 32的圖片放到mipmap-hdpi文件夾中,其他文件夾中不放置,軟件展示圖片的時(shí)候就會(huì)獲取mipmap-hdpi文件夾中的圖片,顯示的效果我們知道是64 * 64,再看對(duì)應(yīng)著剛說的luffy值,是不是看出點(diǎn)什么?好像不同文件夾中的圖片顯示的效果和luffy值有關(guān)啊。

(圖片真實(shí)尺寸*測(cè)試機(jī)對(duì)應(yīng)的本命mipmap文件夾中的luffy值)/當(dāng)前mipmap文件夾中的luffy值=顯示到屏幕上的尺寸

比如 ,當(dāng)將圖片放置到mipmap-hdpi 文件夾中:

(32 * 3)/1.5=64
其中32為圖片尺寸,3為當(dāng)前我是用的測(cè)試機(jī)的luffy值,1.5mipmap-hdpiluffy值。

那么如果我們想不管從哪個(gè)文件夾獲取圖片,展示的都是32*32,那好說啊,按照這個(gè)公式,獲取不同文件夾中需要放置的圖片尺寸。比如mipmap-hdpi放置16 * 16的圖片,就可以在我的測(cè)試機(jī)上展示32 * 32的效果了。

聲明一下,手機(jī)上的app開發(fā)沒有這個(gè)需求,我只是找出這幾個(gè)文件夾中的關(guān)系。

我上邊一直說的展示尺寸都是px,那么在不同的機(jī)器上同時(shí)展示32 * 32的效果,根據(jù)上邊的公式可以實(shí)現(xiàn),但是展示的效果肯定各不相同。
上邊的需求是我在做特定機(jī)器時(shí),只有一種分辨率,一種dpi,那我想把所有mipmap文件夾都塞滿,而且展示的效果都一樣,就需要上邊的公式。

手機(jī)上mipmap文件夾中圖片放置規(guī)則

當(dāng)手機(jī)上不同的機(jī)器,不同的dpi展示同一種效果時(shí),也就是占用屏幕相同的比例時(shí),那表示這個(gè)效果的值就是dp,相同的dp在不同的機(jī)器上展示的效果基本相同,比如我想在480dpi的機(jī)器上展示的效果要和320dpi一樣,那就需要它們展示的dp一樣,我們展示一個(gè)32dp*32dp的圖片。根據(jù)公式: px=dp*(dpi/160)可以得到 32 * luffy=?px;那么480dpi對(duì)應(yīng)的luffy值是3,所以480dpi對(duì)應(yīng)的mipmap中的圖片尺寸是96px * 96px ,320dpi對(duì)應(yīng)的mipmap中的尺寸是64 * 64。

要在不同的機(jī)器上展示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對(duì)應(yīng)px(luffy) 0.75 1 1.5 2 3 4
所需圖片的尺寸(px) 24*24 32*32 48*48 64*64 96*96 128*128

其他dp的圖片都可以按照這個(gè)規(guī)則展示。

mipmap文件夾圖片優(yōu)先使用規(guī)則

當(dāng)合適的mipmap文件夾中沒有對(duì)應(yīng)的圖片的時(shí)候,會(huì)優(yōu)先往高的找,會(huì)優(yōu)先找最近的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容