android 布局中的單位及解析度自解

2021-06-18 04:42:02 字數 3439 閱讀 4944

先上乙個網上copy的

px:是螢幕的畫素點 in

:英吋

mm:公釐 pt

:磅,1/72 英吋

dp:乙個基於

density

的抽象單位,如果乙個

160dpi

的螢幕,

1dp=1px

dip:等同於dp

sp:同

dp相似,但還會根據使用者的字型大小偏好來縮放。

建議使用

sp作為文字的單位,其它用

dip

然後是我自己的理解:

android

的螢幕密度是以

160為基準的,

螢幕密度

(densitydpi)

為160時, 

是將一英吋分為

160份

, 每乙份是1畫素

. 如果螢幕密度

(densitydpi)

為240時, 

是將一英吋分為

240份

, 每乙份是1畫素

. 1英吋

/160(

機器x)  = 1英吋

/240(

機器y)  =  1px

打個比方

, 乙個三英吋的顯示螢幕的機器

, 如果螢幕密度

(densitydpi)

為160, 

即密度比

(density)1.0時, 

畫一條160dip

和160px

的線條, 

兩個都是1英吋

. 可如果還是三英吋的螢幕

, 如果螢幕密度

(densitydpi)

變為320, 

即密度比

(density)2.0時,1

英吋有320

畫素了, 

此時160px

顯示就是半英吋

. 160dip

顯示還是1英吋

, 因為

1dip = 1px * density .

可是你有沒有注意到

, 同樣寬的螢幕

, 比如3英吋

, 如果

density 

是1.0

的話, 

解析度就是

480dip*x

或480px,*x 

如果還是

3英吋的

, density 

是1.5

的話, 

解析度就是

480*1.5 = 720px*x 

或480dip*x. (

這裡的x

代表螢幕的高度

). 如果同樣是

240dip, 

在兩款機器上顯示都是一半的長度

, 這樣就保證了比例

. 這樣的話如果是

480解析度和

720解析度的話

,可以採用同乙個布局檔案了.

又但可是

, 我見過的機器只有

320*240(0.75) , 480*320(1.0) , 800*480(1.5), 854*480(1.5) , 

如果是480 

和800 

兩個版本

, 同一條線

480dip , 480

顯示全屏

, 800

則顯示480 / (800 / 1.5)  屏. 

其中800/1.5

是螢幕的總

dip . 

我們平時說的解析度都是以畫素

px為單位的

.  

由此可見

, 就算是用

dip, 

也不能保證不同解析度的機器的布局比例完全一樣

.  但還是有好處的

. 因為如果是用

px的話

, 有些時候一些布局直接跑到了螢幕外邊

, 除錯起來很麻煩. 

還有, google

**裡邊所用的單位都是以

px為預設單位的. 

apk的資源包中,當螢幕

density=240

時使用hdpi

標籤的資源

當螢幕density=160

時,使用

mdpi

標籤的資源

當螢幕density=120

時,使用

ldpi

標籤的資源。

在每英吋

160點的顯示器上,

1dp = 1px。

下面是幾種不同單位的相互轉換.

public

static

intdip2px(context context, float dipvalue) 

public

static

intpx2dip(context context, float pxvalue) 

public

static

intdip2px(context context, float dipvalue) 

public

static

intpx2dip(context context, float pxvalue) 

下面說下如何獲取解析度:

在乙個activity

的oncreate

方法中,寫入如下**:

displaymetrics metric = new displaymetrics();

getwindowmanager().getdefaultdisplay().getmetrics(metric);

int width = metric.widthpixels;  // 

螢幕寬度(畫素)

int height = metric.heightpixels;  // 

螢幕高度(畫素)

float density = metric.density;  // 

螢幕密度(

0.75 / 1.0 / 1.5

)int densitydpi = metric.densitydpi;  // 

螢幕密度

dpi(

120 / 160 / 240

)這還是挺簡單的, 可是你有沒有在800*480的機器上試過, 是不是得到的寬度是533 ? 因為android剛開始時預設的density是1.0 , 此時你可以再manifest.xml中加入

1.uses-sdk節點,  , 表示不sdk1.6以下的機器不能安裝你的apk了.

2.supports-screens 節點. 

android:smallscreens="true"

android:normalscreens="true"

android:largescreens="true"

android:resizeable="true"

android:anydensity="true" />

Android 中的長度單位 px dp sp

一 介紹一下px 但如果使用 px 作單位,如果螢幕大小不變 假設還是3.2 寸 而螢幕密度變成了320。那麼原來 textview 的寬度設成160px,在密度為320 的3.2 寸螢幕裡看要比在密度為160 的3.2 寸螢幕上看短了一半。二 介紹一下 dp 和 sp。dp 也就是 dip。這個和...

android中的畫素單位dp px pt sp

看到有很多不太理解dp sp和px的區別 現在這裡介紹一下dp和sp。dp也就是dip。這個和sp基本類似。如果設定表示長度 高度等屬性時可以使用dp 或sp。但如果設定字型,需要使用sp。dp是與密度無關,sp除了與密度無關外,還與scale無關。如果螢幕密度為160,這時dp和sp和px是一樣的...

關於android中的單位(dp sp)

android讓人頭疼的適配問題。經常使用的dip sp。有時候用到px。sp和dip同樣。僅僅是sp除了會隨著裝置的不同而不同外,還受使用者設定的影響 一般路徑是在 設定 外觀 字型大小 並且,讓人憤憤的是,在 sony xperia c3 上 不知道是否全部 xperia 中都是這樣 系統預設的...