眾所周知,android廠商非常多,各種尺寸的android手機、平板層出不窮。導致了android生態環境的碎片化現象越來越嚴重。google公司為了解決解析度過多的問題,在android的開發文件中定義了px、dp、sp,方便開發者適配不同解析度的android裝置。對於初級程式設計師來說理解掌握適配的一些基礎知識是必須的。
pixel,即畫素,1px代表螢幕上的乙個物理的畫素點。但px單位不被建議使用。因為同樣畫素大小的在不同手機顯示的實際大小可能不同。要用到px的情況是需要畫1畫素**線或陰影線的時候,如果用其他單位畫則會顯得模糊。
要理解dp,首先要先引入dpi這個概念,dpi全稱是dots per inch,對角線每英吋的畫素點的個數,所以,它的計算公式如下:
比如height和width即為長寬的畫素,平方和即為對角線的畫素個數,size即我們常說的5寸手機、4寸手機中的5和4,即對角線的長度。
所以,一樣是5寸的手機,解析度越高,dpi越高。解析度相同,螢幕對角線英吋數越小,dpi越高。
而dp也叫dip,是device independent pixels。裝置不依賴畫素的乙個單位。在不同的畫素密度的裝置上會自動適配,比如:
在320x480解析度,畫素密度為160,1dp=1px
在480x800解析度,畫素密度為240,1dp=1.5px
計算公式:px = dp * (dpi/160)
我們做個簡單的sample驗證一下,如下,乙個布局**
在480*800解析度中,3.7螢幕對角線英吋數的裝置效果圖如下
在480*800解析度中,5.1螢幕對角線英吋數的裝置效果圖如下
▲ 由此可以看出使用px作為單位的,在不同的裝置中會顯示不同的效果。使用dp作為單位的,會根據不同的裝置進行轉化,適配不同機型。所以建議在長度寬度的數值使用dp作為單位。
既然我們在上面說了,dp可以自動適配裝置機型,那在字型裡是否也同樣可行?我們再做個簡單的sample驗證一下,如下,乙個布局**
在480*800解析度中,3.7螢幕對角線英吋數的裝置效果圖如下
在480*800解析度中,3.7螢幕對角線英吋數的裝置下,我們修改手機系統字型大小,得到效果圖如下
▲ 由此可以看出使用sp作為字型大小單位,會隨著系統的字型大小改變,而dp作為單位則不會。所以建議在字型大小的數值要使用sp作為單位
提供乙個工具類:dp與px值轉換
public class densityutil
/*** 根據手機的解析度從 px(畫素) 的單位 轉成為 dp
*/public static int px2dp(context context, float pxvalue)
}
android中px與sp,dp之間的轉換
android中px與sp,dp之間的轉換 原創 2016年12月17日 22 00 51 標籤 單位轉換 螢幕解析度 螢幕尺寸 dpi 4552 由於android手機廠商很多,導致了不同裝置螢幕大小和解析度都不一樣,然而我們開發者要保持在不同裝置上顯示同樣的視覺效果,就需要做一些適配效果。相關名...
vue中的自適應布局( px與視口)
1.px與視口 2.3.查詢 4.rem 5.vm vh 在靜態頁面中,通常使用px 畫素 作為盒子容器寬高的單位,在pc端,通常認為css中,1px所表示的真實長度是固定的。那麼,px真的是乙個裝置無關,跟長度單位公尺和分公尺一樣是固定大小的嗎?答案是否定的,pc端下和移動端下我們設定的font ...
布局檔案中的筆記
android linespacingextra 2dp 設定行間距為 2dp android linespacingmultiplier 1.2 設定行間距的倍數為1.2倍 android scaletype fitxy 在x軸和y軸上均為沾滿拉伸 當內容過多無法全部顯示時 採用省略號 省略號在結...