標籤: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之間單位轉換