Android中dip(dp)與px之間單位轉換

來源:互聯網
上載者:User

標籤:android   ar   os   使用   sp   strong   on   div   bs   

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;
以上代碼可以在我另一篇文章看得到.該功能是設定Tab的高度,單位是像素.以上的單位轉換是為了支援多解析度手機的.

 

 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);
}

Android中dip(dp)與px之間單位轉換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.