網頁上定義字體大小有常見三種單位,px、em、ptcss
px是pixel縮寫,是基於像素的單位.在瀏覽網頁過程當中,屏幕上的文字、圖片等會隨屏幕的分辨率變化而變化,一個100px寬度大小的圖片,在800×600分辨率下,要佔屏幕寬度的1/8,但在1024×768下,則只佔約1/10。因此若是在定義字體大小時,使用px做爲單位,那一旦用戶改變顯示器分辨率從800到1024,用戶實際看到的文字就要變「小」(天然長度單位),甚至會看不清,影響瀏覽。 html
em:即%,是相對單位,是一個相對長度單位,最初是指字母M的寬度,故名em。現指的是字符寬度的倍數,用法相似百分比,如:0.8em, 1.2em,2em等。一般1em=16px。,通常用來測量長度的通用單位(例如元素週轉的頁邊空白和填充),當用於指定字體大小時,em單位是指父元素的字體大小。web
在一個頁面上給定了一個父元素的字體大小,這樣就能夠經過調整一個元素來成比例的改變全部元素大小.它能夠自由縮放,好比用來製做可伸縮的樣式表。shell
PT是point(磅)縮寫,是一種固定長度的度量單位,大小爲1/72英寸。若是在web上使用pt作單位的文字,字體的大小在不一樣屏幕(一樣分辨率)下同樣,這樣可能會對排版有影響,但在Word中使用pt至關方便。由於使用Word主要目的都不是爲了屏幕瀏覽,而是輸出打印。當打印到實體時,pt做爲一個天然長度單位就方便實用了:好比Word中普通的文檔都用「宋體 9pt」,標題用「黑體 16pt」等等,不管電腦怎麼設置,打印出來永遠就是這麼大。瀏覽器
英寸,1 英寸約等於2.54釐米,主要用來描述手機屏幕的大小。
bash
DPI = Dots Per Inch app
PPI = Pixel Per Inch 字體
兩個參數的區別就在於Dot和Pixel的區別,dot值的是顯示器上每個物理的點,而pixel指的是屏幕分辨率中的最小單位。這個兩個難道會不同麼?會!當一個像素須要多於一個屏幕上的物理點來顯示的時候dot就跟pixel不同了。這個有另外一個叫法叫作dppx(dot per pixel),即每一個像素中有多少個點。大部分的顯示器中一個像素即一個點,但目前一些比較好的屏幕和一些手機屏幕中dppx會大於1。好比說Mac Retina,iPhone,HTC One等。 相信你們都遇到過一些人的電腦屏幕,看上去老是那麼傻大傻大的。就是由於他們把分辨率調的過低致使ppi變低了,讓畫面看上去那麼的不協調。看下面兩張圖片,我在一個1366x768分辨率的顯示器上把分辨率分別設置爲1366x768和1024x768所顯示的效果。 ui
1024 x 768 spa
1366 x 768
可是大可能是狀況你們並不會把這兩個名詞分的那麼清楚,因此若是這兩個出現的時候基本上都表達的是同一個意思,即PPI(每英寸中有多少個像素)。
PPI=屏幕對角線像素點數/屏幕對角線長度=( √ (屏幕橫向像素點^2 + 屏幕縱向像素點^2)/對角線長度)
舉例說明:若一款手機屏幕分辨率爲720px*1280px,4.3英寸。則點密度爲 √ (720^2 +1280^2) /4.3 = 342ppi。連接
分辨率這個詞在不少地方都有,好比相機、視頻、掃描儀。這裏說的就是顯示器的分辨率。顯示器是由一個個像素點(pixel)所組成的,通常所說的顯示器分辨率是1280x720就表示這個顯示器水平方向有1280個像素,垂直方向上有720個像素。可是並不是分辨率越高屏幕顯示效果越好,還須要根據屏幕的大小來決定。也就是要看像素的密度(pixel density),這個指標就是DPI(Dots Per Inch)或者PPI(Pixels Per Inch),即英尺屏幕上像素或者是點的個數。
6.xxxhdpi: dpi範圍爲480~560
private void getDpi() {DisplayMetrics dm = getResources().getDisplayMetrics();Log.i("TAG", "density = " + dm.density);Log.i("TAG", "densityDpi = " + dm.densityDpi);}複製代碼
density = 2densityDpi = 320複製代碼
高度:1920 / 3 = 640dp,咱們在設計控件的寬度時要注意不能超過設備的最大寬度值。
public static float applyDimension(int unit, float value,DisplayMetrics metrics) {switch (unit) {case COMPLEX_UNIT_PX:return value;case COMPLEX_UNIT_DIP:return value * metrics.density;case COMPLEX_UNIT_SP:return value * metrics.scaledDensity;case COMPLEX_UNIT_PT:return value * metrics.xdpi * (1.0f/72);case COMPLEX_UNIT_IN:return value * metrics.xdpi;case COMPLEX_UNIT_MM:return value * metrics.xdpi * (1.0f/25.4f);}return 0;}複製代碼
return value * metrics.density;複製代碼
return value * metrics.scaledDensity;複製代碼
一般咱們在給頁面作UI適配時,會去找來不少臺不一樣的Android設備,其實咱們只須要到系統菜單中去設置density、scaledDensity和分辨率這些參數,而後就能夠在一臺Android設備上看到不一樣Android設備上的頁面展現效果,以huawei mate8手機爲例,進入到系統設置菜單顯示條目:
在終端輸入adb shell wm查看支持的命令集:
更改和查看density命令:
更改和查看分辨率命令: