038android初级篇之android UI中的单位

Android UI设计长度单位有

px   :是屏幕的像素点
in    :英寸
mm         :毫米
pt    :磅,1/72 英寸
dp   :一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1px
dip  :Density independent pixels ,设备无关像素,等同于dp
sp   :同dp相似,但还会根据用户的字体大小偏好来缩放。
建议使用sp作为文本的单位,其它用dip(dp)

常见的屏幕的类型

不同屏幕的的不同在于:density和分辨率不同。

density值表示每英寸有多少个显示点
而分辨率表示设备长和宽上的像素的个数。

apk的资源包中,当屏幕density=240时使用hdpi标签的资源

当屏幕density=160时,使用mdpi标签的资源

当屏幕density=120时,使用ldpi标签的资源。

在每英寸160点的显示器上,1dp = 1px。

针对dip和px 的关系,做以下概述:

  1. QVGA屏density=120; QVGA(240*320)
  2. HVGA屏density=160; HVGA(320*480)
  3. WVGA屏density=240; WVGA(480*800)
  4. WQVGA屏density=120 WQVGA(240*400)

下面是几种不同单位的相互转换.

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.getResource().getDisplayMetrics().density; 
return (int)(pxValue / scale + 0.5f); 
} 
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.getResource().getDisplayMetrics().density; 
return (int)(pxValue / scale + 0.5f); 
}

android中获取分辨率

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)

参考链接

  1. android中像素单位dp、px、pt、sp的比较

你可能感兴趣的:(038android初级篇之android UI中的单位)