【www.bbyears.com--小米路由器】
最近在做xml文件布局的时候,要用到获取屏幕的高度,我用的真机是小米2S,屏幕分辨率是1280*720,当然它的单位不是布局文件里的dp了,然后我上网查了一下分辨率的单位和dp之间的关系以及转换方式,在这里做了一个总结:首先来看一下他们的基本概念:
px :是屏幕的像素点
dp :一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1px
dip :等同于dp
sp :同dp相似,文本的单位
下面来看一下手机屏幕类型和密度以及分辨率的对应关系
QVGA屏density=120 QVGA(240*320)
HVGA屏density=160 HVGA(320*480)
WVGA屏density=240 WVGA(480*800)
WQVGA屏density=120 WQVGA(240*400)
pixs =dips * (densityDpi/160).
dips=(pixs*160)/densityDpi 但是我们在代码里面进行转化的时候还需要有一个偏移值:0.5f
像素和dp之间的转换
代码如下public int Dp2Px(Context context, float dp) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dp * scale + 0.5f);
}
public int Px2Dp(Context context, float px) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (px / scale + 0.5f);
}
这里我把获取屏幕高度的代码也贴上来吧:
代码如下 DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels; 我们看到,这里的scale是在这个类DisplayMetrics中定义的全局变量,其实这个值就是当前手机的density/160,scaleDensity是用来px和sp之间的转化和scale差不多。还有一点就是这里转化都会有一个偏移值处理
dp这个单位可能对web开发的人比较陌生,因为一般都是使用px(像素)
但是,现在在开始android应用和游戏后,基本上都转换成用dp作用为单位了,因为可以支持多种分辨率的手机.