Android螢幕計量單位詳解

來源:互聯網
上載者:User

1.px (pixels)(像素):是螢幕的物理像素點,與密度相關,密度大了,單位面積上的px會比較多。通常不推薦使用這個。

2.dip或dp(與密度無關的像素):一個基於density的抽象單位,這個和裝置硬體有關,通常在開發中設定一些view的寬高推薦用這個,一般情況下,在不同解析度,都不會有縮放的感覺。在運行時, Android根據使用中的螢幕的實際密度, 透明地處理任何所需dip單位的縮放。
3.sp(與刻度無關的像素):同dip/dp相似,會根據使用者的字型大小偏好來縮放,主要用於設定字型的大小。

可能很多朋友對dip和px 的區別,不是很清楚,包括我自己之前都沒弄清楚,下面簡單討論一下:
首先明確一點:

HVGA屏density=160;QVGA屏density=120;

WVGA屏density=240;WQVGA屏density=120

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

dip到px的轉換公式: px = dip * (density / 160)

Android官方定義dip等價於160dpi螢幕下的一個物理像素點, 即1dip=1px。舉例來說, 在 240 dpi 的螢幕上, 1dip 等於 1.5px。

 

不同density下螢幕解析度資訊,以480dip*800dip的 WVGA(density=240)為例:
    1.當density=120時螢幕實際解析度為240px*400px (兩個點對應一個解析度)狀態列和標題列高為19px或者25dip。
橫屏時螢幕寬度為400px或者800dip,工作區域高度211px或者455dip;
豎屏時螢幕寬度為240px或者480dip,工作區域高度381px或者775dip。
    2.當density=160時螢幕實際解析度為320px*533px (3個點對應兩個解析度)狀態列和標題列高為25px或者25dip。
橫屏是螢幕寬度533px 或者800dip,工作區域高度295px或者455dip;
豎屏時螢幕寬度320px或者480dip,工作區域高度508px或者775dip。
    3.當density=240時螢幕實際解析度為480px*800px (一個點對於一個解析度)狀態列和標題列高為38px或者25dip。
橫屏是螢幕寬度800px 或者800dip,工作區域高度442px或者455dip;
豎屏時螢幕寬度480px或者480dip,工作區域高度762px或者775dip。

    在Android的應用程式套件apk中,系統會根據各個裝置的具體情況引用相應的資源檔(註:不加任何標籤的資源是各種解析度情況下共用的):

當螢幕density=240時,使用hdpi標籤的資源;
當螢幕density=160時,使用mdpi標籤的資源;
當螢幕density=120時,使用ldpi標籤的資源。

下面是在manifest中設定app在不同解析度時,是否支援多密度的方法。

...
<supports-screens
     android:smallScreens="true"
     android:normalScreens="true"
     android:largeScreens="true"
     android:xlargeScreens="true"
     android:anyDensity="true" />

...

 

附:
系統對螢幕大小和密度分類對照圖 :

 

 

表 1. Android SDK中包含的模擬器皮膚的螢幕尺寸和密度,以及其他典型的解析度.

 

  Low density (120), ldpi Medium density (160), mdpi High density (240), hdpi Extra high density (320), xhdpi
Small screen QVGA (240x320)   480x640  
Normal screen WQVGA400 (240x400) 
WQVGA432 (240x432)
HVGA (320x480) WVGA800 (480x800) 
WVGA854 (480x854) 
600x1024
640x960
Large screen WVGA800** (480x800) 
WVGA854** (480x854)
WVGA800* (480x800) 
WVGA854* (480x854) 
600x1024
   
Extra Large screen 1024x600 WXGA (1280x800)†
1024x768
1280x768
1536x1152
1920x1152 
1920x1200
2048x1536
2560x1536 
2560x1600

 

* 要類比此配置, 使用WVGA800 或 WVGA854建立一個AVD, 指定自訂密度160.
** 要類比此配置, 使用WVGA800 或 WVGA854建立一個AVD, 指定自訂密度120.

協助工具輔助類:

import android.content.Context;  

public class DensityUtil {    

    public static int dip2px(Context context, float dipValue) {  

        final float scale = context.getResources().getDisplayMetrics().density;  

        return (int) (dipValue * scale + 0.5f);  

    }  

    public static int px2dip(Context context, float pxValue) {  

        final float scale = context.getResources().getDisplayMetrics().density;  

        return (int) (pxValue / scale + 0.5f);  

    }  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.