Android螢幕密度

2021-09-30 14:50:17 字數 2719 閱讀 1404

一、常用的單位:相對單位主要有:px、sp、dp

絕對單位主要有:pt、in、mm

二、單位應用總結:一般用相對單位,而不是絕對單位

1、字型的大小一般使用sp,用此單位的字型能夠根據使用者設定字型的大小而自動縮放

2、空間等相對距離一般使用dp(dip),隨著密度變化,對應的畫素數量也變化,但並沒有直接的相對比例的變化。

3、px與實際畫素有關,及與密度有關!dp和sp和實際畫素沒有關係,對於一定解析度但不同密度的螢幕,px單位的應用可能會導致長度的相對比例的變化。

三、密度與解析度:

密度值表示每英吋有多少個顯示點,與解析度是兩個概念。

其螢幕密度標準是:hvga屏density=160;qvga屏density=120;wvga屏density=240;wqvga屏density=120

具體的應用運算關係:假設解析度是 x*y, 密度為 d, 螢幕實際大小為 a*b那麼關係為 x*y = d * a * b (約等於)

不同density下螢幕解析度資訊,以480dip*800dip的 wvga(density=240)為例density=120時 螢幕實際解析度為240px*400px (兩個點對應乙個解析度)

四、對比總結:

1、在相同密度(即同一實體螢幕)不同解析度的情況下,與實體密度無關的相對單位sp和dp顯示正常

2、在相同解析度不同密度的情況下,因為一般情況下,都用的標準密度,所以分析的意義不是很大

其他資料:

px:是螢幕的畫素點

in:英吋

mm:公釐

pt:磅,1/72 英吋

dp:乙個基於density的抽象單位,如果乙個160dpi的螢幕,1dp=1px

dip:等同於dp

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

建議使用sp作為文字的單位,其它用dip

針對dip和px 的關係,做以下概述:

hvga屏density=160;qvga屏density=120;wvga屏density=240;wqvga屏density=120

density值表示每英吋有多少個顯示點,與解析度是兩個概念。

不同density下螢幕解析度資訊,以480dip*800dip的 wvga(density=240)為例

density=120時 螢幕實際解析度為240px*400px (兩個點對應乙個解析度)

狀態列和標題欄高各19px或者25dip

橫屏是螢幕寬度400px 或者800dip,工作區域高度211px或者480dip

豎屏時螢幕寬度240px或者480dip,工作區域高度381px或者775dip

density=160時 螢幕實際解析度為320px*533px (3個點對應兩個解析度)

狀態列和標題欄高個25px或者25dip

橫屏是螢幕寬度533px 或者800dip,工作區域高度295px或者480dip

豎屏時螢幕寬度320px或者480dip,工作區域高度508px或者775dip

density=240時 螢幕實際解析度為480px*800px (乙個點對於乙個解析度)

狀態列和標題欄高個38px或者25dip

橫屏是螢幕寬度800px 或者800dip,工作區域高度442px或者480dip

豎屏時螢幕寬度480px或者480dip,工作區域高度762px或者775dip

apk的資源包中

當螢幕density=240時使用hdpi 標籤的資源

當螢幕density=160時,使用mdpi標籤的資源

當螢幕density=120時,使用ldpi標籤的資源。

不加任何標籤的資源是各種解析度情況下共用的。

布局時盡量使用單位dip,少使用px

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

publicstaticintdip2px(context context, float dipvalue)

publicstaticintpx2dip(context context, float pxvalue)

publicstaticintdip2px(context context, float dipvalue)

publicstaticintpx2dip(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 螢幕密度

drawable drawable hdpi drawable mdpi drawable ldpi的區別 同樣使用60 60的,在螢幕密度為0.75下 1 drawable hdpi裡面存放高解析度的,2 drawable mdpi drawable 裡面存放中等解析度的,獲取button高度為4...

Android螢幕密度dpi

什麼叫密度?android中的密度就是螢幕每英吋所包含的畫素點數。單位為dpi px 畫素。比如我們的手機寬2英吋長3英吋。如果他的解析度是320 480px的話。他的密度就是160dpi 如果手機的解析度為640 960px.寬為2英吋,高為3英吋。手機的密度是320dpi 因此密度高的手機螢幕顯...

Android螢幕適配之支援各種螢幕密度 三

我們之前了解過螢幕的畫素密度 dpi,我們身邊有很多種類的手機,它們的dpi各不相同,我們如何去適配這些不同的螢幕呢?單位務必使用dp或者sp dp是一種非密度制約畫素,其尺寸與 160 dpi 畫素的實際尺寸相同,即對應mdpi下的尺寸。sp也是一種基本單位,它用於設定文字的大小,它可以根據我們設...