有一段日子,關係畫素的問題一直困擾著我,理不清他們之間的關係,直到在網上查閱了很多相關知識後,才有了
比較清楚的認識,感謝度娘!現作為筆記寫下來,也希望能對別人有所幫助。
px:平常所說的1920×1080說的是畫素數量,也就是1920px×1080px,代表手機高度上有1920個畫素點,寬度上
1080個畫素點。我們在做android ui開發時不建議使用px單位,因為同樣100px的,在不同手機上顯示的
實際大小
可能不同。
dpi:畫素密度。假設有一部手機,螢幕的物理尺寸為1.5英吋x2英吋,螢幕解析度為240x320,則我們可以計算出在
這部手機的螢幕上,每英吋包含的畫素點的數量為240/1.5=160dpi(橫向)或320/2=160dpi(縱向),160dpi就是這部
手機的畫素密度,畫素密度的單位dpi是dots per inch的縮寫,即每英吋畫素數量。橫向和縱向的這個值都是
相同的,原因
是大部分手機螢幕使用正方形的畫素點。
android系統定義了四種畫素密度:低(120dpi)、
中(160dpi)、
高(240dpi)
和超高(320dpi),
它們對應的dp到px的係數分別為0.75、1、1.5和2,這個係數乘以
dp長度就是畫素數。
例如介面上有一
個長度為「80dp」的,那麼它在240dpi的手機上實際顯示為80x1.5=120px,
在320dpi的手機上實際
顯示為80x2=160px。
如果你拿這兩部手機放在一起對比,會發現這個的物理尺寸「差不多」
,這就是使用dp作為單位
的效果。
dp和dip:一樣的概念。其實dp就是為了使得開發者設定的長度能夠根據不同螢幕(解析度/尺寸也就是dpi)獲得不同的像
數數量(px)。如:我將乙個控制項設定長度為1dp,那麼在160dpi上該控制項長度為1px,在240dpi的螢幕上該控制項的長度為
1*240/160
=1.5個
畫素點,
也就是dp會隨著不同螢幕而改變控制項長度的畫素數量。
記住一點,dp最終都要化為畫素數量來衡
量大小的,
因為只有像
素數量最直觀。我們在做ui時一般就得使用dp作為單位。
sp:與縮放無關的抽象畫素(scale-independent pixel)。sp和dp很類似但唯一的區別是,android系統允許使用者自定義
文字尺寸大小(小、正常、大、超大等等),當文字尺寸是「正常」時1sp=1dp=0.00625英吋,而當文字尺寸是「大」或「超
大」時,
1sp>1dp=0.00625英吋。類似我們在windows裡調整字型尺寸以後的效果——視窗大小不變,只有文字大小
改變。
也就是說sp是
用來指定字型的大小。
dp轉px:對於android 來說,最終我們能讀懂或者衡量的都是px,所以最後我們都將dp化為px好理解一點。我總結了dp轉
px的公式:
dp值×(當前dpi/160dpi)= 當前的畫素數目。 那麼「當前dpi」怎麼知道是多少呢?當然也有方法的,我們可以寫代
碼獲得:
displaymetrics dm = new也可以用dp值×density得到px的值。displaymetrics();
getwindowmanager().getdefaultdisplay().getmetrics(dm);
int densitydpi = dm.densitydpi
; //
當前dpi:120/160/240/320
float density = dm.density
;
Android裡透明的ListView
發現了乙個list滾動時,某item背景透明的問題。網上搜尋一下,發現有很多人在問list背景黑色的問題,交流中給出的解決方案基本上很統一。先是解釋問題產生的原因是android對list的滾動做了顯示優化,用寫在該list的layout檔案中的android cachecolorhint顏色值與i...
記Android裡的座標
android的座標系統其實是乙個比較細也比較雜的東西,想乙個小的對比文章,以後忘了可以看看。首先是motionevent的getrawx和getx兩個函式。這個還是比較簡單的,getrawx取的是相對於螢幕的座標,螢幕的原點 0,0 在左上角,x軸正方向是向右,y軸正方向向下。getx是相對于父元...
集結Android開發裡的各種大神
國內 trinea t大 t大部落格 codekk t大主導的開源專案集合及原始碼解析 codekk 鴻洋神 鴻洋神的csdn 任玉剛 android開發藝術探索作者 任大的csdn 郭霖 第一行 作者 郭大俠的csdn 胡凱 胡凱部落格 老羅 底層牛人,在下水平不夠,看得很少 老羅的csdn 乾貨...