如果想了解完整的屏幕尺寸问题,可以阅读如下文章Android屏幕尺寸详解。
现在主要说的是dp和px的转换。
dp = (pixels * 160) / screen density
在Android中,规定以160dpi(即屏幕分辨率为320×480)为基准:1dp=1px
密度类型 | 代表的分辨率(px) | 屏幕密度(dpi) | 换算(px/dp) | 比例 |
---|---|---|---|---|
低密度(ldpi) | 240×320 | 120 | 1dp=0.75px | 3 |
中密度(mdpi) | 320×480 | 160 | 1dp=1px | 4 |
高密度(hdpi) | 480×800 | 240 | 1dp=1.5px | 6 |
超高密度(xhdpi) | 720×1280 | 320 | 1dp=2px | 8 |
超超高密度(xxhdpi) | 1080×1920 | 480 | 1dp=3px | 12 |
屏幕密度可以如下获取:
//float density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
//int densityDPI = dm.densityDpi; // 像素密度(每寸像素:120/160/240/320)
//屏幕密度:density=1.5
//像素密度:densityDPI=240
getResources().getDisplayMetrics().densityDpi //就是像素密度。
[ro.sf.lcd_density]: [240]
public static float pxToDp(float px) {
dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
float densityDpi = dm.densityDpi;
return px / (densityDpi / 160f);
}
public static int dpToPx(float dp) {
dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
float density = dm.density;
return Math.round(dp * density);
}
获取屏幕状态的代码:
private String getScreenParams() {
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int heightPixels = dm.heightPixels;//高的像素
int widthPixels = dm.widthPixels;//宽的像素
int densityDpi = dm.densityDpi;//dpi
float xdpi = dm.xdpi;//xdpi
float ydpi = dm.ydpi;//ydpi
float density = dm.density;//density=dpi/160,密度比
float scaledDensity = dm.scaledDensity;//scaledDensity=dpi/160 字体缩放密度比
float heightDP = heightPixels / density;//高度的dp
float widthDP = widthPixels / density;//宽度的dp
String str = "heightPixels: " + heightPixels + "px";
str += "\nwidthPixels: " + widthPixels + "px";
str += "\ndensityDpi: " + densityDpi + "dpi";
str += "\nxdpi: " + xdpi + "dpi";
str += "\nydpi: " + ydpi + "dpi";
str += "\ndensity: " + density;
str += "\nscaledDensity: " + scaledDensity;
str += "\nheightDP: " + heightDP + "dp";
str += "\nwidthDP: " + widthDP + "dp";
return str;
}
//打印信息
heightPixels: 2235px
widthPixels: 1080px
densityDpi: 480dpi
xdpi: 391.885dpi
ydpi: 412.75dpi
density: 3.0
scaledDensity: 3.0
heightDP: 745.0dp
widthDP: 360.0dp