Android的單位及螢幕解析度

2021-06-04 14:02:47 字數 2734 閱讀 2592

一、常用的單位:相對單位主要有: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

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

public static int dip2px(context context, float dipvalue)

public static int px2dip(context context, float pxvalue)

public static int dip2px(context context, float dipvalue)

public static int px2dip(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的單位及螢幕解析度

一 常用的單位 相對單位主要有 px sp dp 絕對單位主要有 pt in mm 二 單位應用總結 一般用相對單位,而不是絕對單位 1 字型的大小一般使用sp,用此單位的字型能夠根據使用者設定字型的大小而自動縮放 2 空間等相對距離一般使用dp dip 隨著密度變化,對應的畫素數量也變化,但並沒有...

Android的單位及螢幕解析度

一 常用的單位 相對單位主要有 px sp dp 絕對單位主要有 pt in mm 二 單位應用總結 一般用相對單位,而不是絕對單位 1 字型的大小一般使用sp,用此單位的字型能夠根據使用者設定字型的大小而自動縮放 2 空間等相對距離一般使用dp dip 隨著密度變化,對應的畫素數量也變化,但並沒有...

android螢幕適配理解及常見單位

android中適配是一件很棘手的事情,本篇文章詳細的介紹螢幕顯示的原理,為什麼會資源檔案中會存在 drawable ldpi drawable mdpi drawable hdpi drawable xhdpi等資料夾,為什麼要使用dp作為單位等等。首先從這兩張的顯示效果開始說起 這是一張200x...