1.单位解释
dp(dip):
device independent pixels(
设备独立像素
).
不同设备有不同的显示效果
,
这个和设备硬件有关,一般我们为了支持
WVGA
、
HVGA
和
QVGA
推荐使用这个,不依赖像素。
px:
pixels(
像素
).
不同设备显示效果相同,一般我们
HVGA
代表
320x480
像素,这个用的比较多。
pt:
point
,是一个标准的长度单位,
1pt
=
1/72
英寸,用于印刷业,非常简单易用;
sp:
1pt=2.22sp
scaled pixels(
放大像素
).
主要用于字体显示
best for textsize
。
2.单位转换
//dip转换px
public static int dip2px(Context context, float dipValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(dipValue * scale + 0.5f);
}
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(dipValue * scale + 0.5f);
}
//px转换dip
public static int px2dip(Context context, float pxValue){
final float scale = context.getResource().getDisplayMetrics().density;
return (int)(pxValue / scale + 0.5f);
}
public static int px2dip(Context context, float pxValue){
final float scale = context.getResource().getDisplayMetrics().density;
return (int)(pxValue / scale + 0.5f);
}
//dip转换为px
(int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 50, context.getResources()
.getDisplayMetrics());
TypedValue.COMPLEX_UNIT_DIP, 50, context.getResources()
.getDisplayMetrics());
TypedValue.COMPLEX_UNIT_DIP可以换成不同的字段,可以将不同的单位转换成px
3.获取分辨率:
在一个Activity的onCreate方法中,写入如下代码:
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)
intdensityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240)
4.Android支持下列所有单位:
px(像素):屏幕上的点。
in(英寸):长度单位。
mm(毫米):长度单位。
pt(磅):1/72英寸。
dp(与密度无关的像素):一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp = 1px。
dip:与dp相同,多用于android/ophone示例中。
sp(与刻度无关的像素):与dp类似,但是可以根据用户的字体大小首选项进行缩放。