今天又开始写Android了,很久没写android了,一些小知识点都忘记了,只能通过书本或者internet查找了。为了以后查找方便,就把这些小知识点记录下来。
一、Android中像素单位dp、px、pt、sp的比较
1.dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
2.px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。
3.pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用。
4.sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。
因此,google推荐空间等相对距离一般使用dip,字体统一使用sp
二、px和dp之间的转换
public int Dp2Px(Context context, float dp);dp—> px
{
final float scale =
context.getResources().getDisplayMetrics().density;
return (int) (dp * scale +
0.5f);
}
public
int Px2Dp(Context context, float px) ;px—>dp
{
final float scale =
context.getResources().getDisplayMetrics().density;
return (int) (px / scale +
0.5f);
}
三、获取分辨率
分辨率是屏幕图像的精密度,是指显示器所能显示的像素的多少。由于屏幕上的点、线和面都是由像素组成的,显示器可显示的像素越多,画面就越精细,同样的屏幕区域内能显示的信息也越多,所以分辨率是个非常重要的性能指标之一。可以把整个图像想象成是一个大型的棋盘,而分辨率的表示方式就是所有经线和纬线交叉点的数目。
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)
以上供参考,如果 UI 能够以 sp 为单位提供设计是最好的,如果设计中没有 sp的概念,则开发人员也可以通过适当的换算取近似值。