Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中 dp 與 px 單位轉換

Android中 dp 與 px 單位轉換

編輯:關於Android編程

px :是屏幕的像素點
in :英寸
mm :毫米
pt :磅,1/72 英寸
dp :一個基於density的抽象單位,如果一個160dpi的屏幕,1dp=1px
dip :等同於dp
sp :同dp相似,但還會根據用戶的字體大小偏好來縮放。
建議使用sp作為文本的單位,其它用dip

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

QVGA屏density=120; QVGA(240*320)

HVGA屏density=160; HVGA(320*480)

WVGA屏density=240; WVGA(480*800)

WQVGA屏density=120 WQVGA(240*400)

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


dp與px換算公式:

pixs =dips * (densityDpi/160). 
dips=(pixs*160)/densityDpi

dp這個單位可能對web開發的人比較陌生,因為一般都是使用px(像素)
但是,現在在開始android應用和游戲後,基本上都轉換成用dp作用為單位了,因為可以支持多種分辨率的手機.


以下是這兩個單位的概念:
px (pixels)像素 –一個像素通常被視為圖像的最小的完整采樣,這個用的比較多,特別是web開發,頁面基本都是使用像素作為單位的.
dip或dp (device independent pixels)設備獨立像素 — 這個和設備硬件有關,一般我們為了支持手機上多種分辨率,如WVGA、HVGA和QVGA,都會使用dip作為長度的單位
在Android開發我們一般都可以不需要使用px的,但是某一些控件的屬性沒有直接支持dip,像下面的代碼

android.view.ViewGroup.LayoutParams.height
android.view.ViewGroup.LayoutParams.width


上面這兩個屬性的單位為像素,但是為了兼容多種分辨率的手機,我們需要最好使用dip,時候我們可以調用以下的代碼進行轉換.

int heightPx= DisplayUtil.dip2px(this, 33);
mTabHost.getTabWidget().getChildAt(i).getLayoutParams().height = heightPx;

public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
 
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved