Android 屏幕適配

前言

手機的屏幕適配一直是很是麻煩的,如今我就以作筆記的方式來簡單梳理下android

單位理解

首先讓咱們先來看看關於手機所用到的單位佈局

真實物理尺寸單位:

mm:表示毫米,是屏幕的物理尺寸。 字體

in:表示英寸,是屏幕的物理尺寸。每英寸等於2.54釐米。例如,形容手機屏幕大小,常常說,3.2(英)寸、3.5(英)寸、4(英)寸就是指這個單位。這些尺寸是屏幕的對角線長度。若是手機的屏幕是3.2英寸,表示手機的屏幕(可視區域)對角線長度是3.2*2.54 = 8.128釐米.xml

pt:表示一個點,是屏幕的真實物理尺寸,經常使用於印刷。大小爲1英寸的1/72. 在Photoshop 上, 默認設置是72像素/英寸, 因此在這種狀況下,1pt = 1pxblog

抽象單位

px:表示屏幕實際的象素, 就是屏幕上一個一個的點,例如,320*480的屏幕在橫向有320個象素,在縱向有480個象素;像素並不能表示真實的尺寸,一個像素點尺寸有可能很大(例如在投影儀的屏幕上),也有可能很小(如在手機上)。因此在尺寸不變的狀況下分辨率越高的的手機像素點尺寸越小。ip

dip:邏輯長度單位,也寫做dp, 他兩都是一個意思。它Android 本身抽象出來的單它與像素無關,與屏幕密度(下面解釋)無關,可是會根據屏幕的密度(density(一英尺標準160個點))進行縮放。在 160 dpi 屏幕上,1dp=1px=1/160英寸,隨着密度變化,對應的像素數量也變化,但並無直接的變化比例utf-8

dp:同dip,是其簡寫。get

densityDpi: 屏幕密度,對應於PC領域的DPI, 也就是一英寸裏有多少個像素。標準的是160, 因此在density=160時,1dp = 1px, density=240時, 1dp = (240/160) px = 1.5px.it

density:上面的比例因子1.5 就是densityio

sp:這個用於Android 的字體大小,sp除了與密度無關外,還與scale無關,其實跟pt的含義也是相似的,也是能夠表達真實的物理尺寸,只是它適用在手機上,指的是標準狀況(density=160)下一個「點」的大小。 (160sp)  = (一英尺) = (72pt) 因此  1sp = (72/160)pt

注意:若是屏幕密度爲160,1dp=1sp=1px,但若是使用px做單位,若是屏幕大小不變(假設仍是3.2寸),而屏幕密度變成了320。那麼原來TextView的寬度設成160px,在密度爲320的3.2寸屏幕裏看要比在密度爲160的3.2寸屏幕上看短了一半。但若是設置成160dp或160sp的話。系統會自動將width屬性值設置成320px的。也就是160 * 320 / 160。其中320 / 160可稱爲密度比例因子。也就是說,若是使用dp和sp,系統會根據屏幕密度的變化自動進行轉換。

簡單認識

練習佈局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="50mm"
android:layout_height="50mm"
android:background="#789789"
android:gravity="center" />
</LinearLayout>

在4英寸(480 X 800)手機上面運行的時候效果圖(左)              6英寸(1440 x 2560)(右)

FAM(6KF}LG{~W[]%VV5$B8I                                O4M}I[I)YMH}UP{7W@DI1R4

從效果圖上能夠看出他們與手機的具體尺寸有關

注意:同理經過實驗能夠得知當單位爲 mm、in、pt的時候,都是具體的物理尺寸,在不一樣的手機上面大小同樣,有多餘就會超出屏幕,不會縮放,與像素密度無關。

當設置單位爲 px的時候

<TextView
android:layout_width="400px"
android:layout_height="400px"
android:background="#789789"
android:gravity="center" />

在4英寸(480 X 800)手機上面運行的時候效果圖(左)              6英寸(1440 x 2560)(右)

image                    image

 

能夠看出寬度和手機的橫向像素(咱們常說的分辨率)有關  1px = 1個像素

 

<TextView
android:layout_width="300dp"
android:layout_height="300px"
android:background="#789789"
android:gravity="center" />

在4英寸(480 X 800)手機上面運行的時候效果圖(左)              6英寸(1440 x 2560)(右)

image     image

能夠看出 android系統對 dp單位進行了縮放,簡單的說像素(分辨率)越大,1dp 所擁有的像素就越多,咱們能夠把屏幕密度  density=160 當成一個android內部轉換基準

綜上所述:在屏幕適配的時候儘可能使用dp做爲單身。

相關文章
相關標籤/搜索