屏幕適配是指:使得某一元素在Android不同尺寸、不同分辨率的手機上具備相同的顯示效果
為什么要進行Android屏幕適配
由于Android系統的開放性,任何用戶、開發者、OEM廠商、運營商都可以對Android進行定制,于是導致:
- Android系統碎片化:小米定制的MIUI、魅族定制的flyme、華為定制的EMUI等等
當然都是基于Google原生系統定制的
Android機型屏幕尺寸碎片化:5寸、5.5寸、6寸等等
Android屏幕分辨率碎片化:320x480、480x800、720x1280、1080x1920
據友盟指數顯示,統計至2015年12月,支持Android的設備共有27796種
當Android系統、屏幕尺寸、屏幕密度出現碎片化的時候,就很容易出現同一元素在不同手機上顯示不同的問題。
試想一下這么一個場景:
為4.3寸屏幕準備的UI設計圖,運行在5.0寸的屏幕上,很可能在右側和下側存在大量的空白;而5.0寸的UI設計圖運行到4.3寸的設備上,很可能顯示不下。為了保證用戶獲得一致的用戶體驗效果:使得某一元素在Android不同尺寸、不同分辨率的手機上具備相同的顯示效果,于是,我們便需要對Android屏幕進行適配。
幾個與屏幕相關的概念
屏幕尺寸
含義:手機對角線的物理尺寸
單位:英寸(inch),1英寸=2.54cm
Android手機常見的尺寸有5寸、5.5寸、6寸等等
屏幕分辨率
含義:手機在橫向、縱向上的像素點數總和
1、一般描述成屏幕的"寬x高”=AxB
2、含義:屏幕在橫向方向(寬度)上有A個像素點,在縱向方向
(高)有B個像素點
3、例子:1080x1920,即寬度方向上有1080個像素點,在高度方向上有1920個像素點
- 單位:px(pixel),1px=1像素點
UI設計師的設計圖會以px作為統一的計量單位
Android手機常見的分辨率:320x480、480x800、720x1280、1080x1920
屏幕像素密度
含義:每英寸的像素點數
單位:dpi(dots per ich)
假設設備內每英寸有160個像素,那么該設備的屏幕像素密度=160dpi
安卓手機對于每類手機屏幕大小都有一個相應的屏幕像素密度:
密度類型 | 代表的分辨率(px) | 屏幕像素密度(dpi) |
---|---|---|
低密度(ldpi) | 240x320 | 120 |
中密度(mdpi) | 320x480 | 160 |
高密度(hdpi) | 480x800 | 240 |
超高密度(xhdpi) | 720x1280 | 320 |
超超高密度(xxhdpi) | 1080x1920 | 480 |
屏幕尺寸、分辨率、像素密度三者關系
一部手機的分辨率是寬x高,屏幕大小是以寸為單位,那么三者的關系是:
密度無關像素
含義:density-independent pixel,叫dp或dip,與終端上的實際物理像素點無關。
單位:dp,可以保證在不同屏幕像素密度的設備上顯示相同的效果
1、Android開發時用dp而不是px單位設置圖片大小,是Android特有的單位
2、場景:假如同樣都是畫一條長度是屏幕一半的線,如果使用px作為計量單位,那么在480x800分辨率手機上設置應為240px;在320x480的手機上應設置為160px,二者設置就不同了;如果使用dp為單位,在這兩種分辨率下,160dp都顯示為屏幕一半的長度。
dp與px的轉換
因為ui設計師給你的設計圖是以px為單位的,Android開發則是使用dp作為單位的,那么我們需要進行轉換:
- dp與px的轉換
因為ui設計師給你的設計圖是以px為單位的,Android開發則是使用dp作為單位的,那么我們需要進行轉換:
密度類型 | 代表的分辨率(px)| 屏幕像素密度(dpi)| 換算(px/dp)| 比例
----|------|----
低密度(ldpi)| 240x320 | 120 | 1dp=0.75px | 3
中密度(mdpi)| 320x480 | 160 | 1dp=1px | 4
高密度(hdpi)| 480x800 |240 | 1dp=1.5px | 6
超高密度(xhdpi)| 720x1280 | 320 | 320 1dp=2px | 8
超超高密度(xxhdpi)| 1080x1920 | 480 | 1dp=3px | 12
在Android中,規定以160dpi(即屏幕分辨率為320x480)為基準:1dp=1px
獨立比例像素
含義:scale-independent pixel,叫sp或sip
單位:sp
1、Android開發時用此單位設置文字大小,可根據字體大小首選項進行縮放
2、推薦使用12sp、14sp、18sp、22sp作為字體設置的大小,不推薦使用奇數和小數,容易造成精度的丟失問題;小于12sp的字體會太小導致用戶看不清