屏幕dp px换算公式:
![这里写图片描述](https://img-blog.csdn.net/20180829143904957?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FkZnNhZHNmYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
其中width、height为我们的手机屏幕宽高,即1920*1080;
inch为对角尺寸,常见5.5寸,5.0寸等;
public void getAndroiodScreenProperty() {
WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels; // 屏幕宽度(像素)
int height = dm.heightPixels; // 屏幕高度(像素)
float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5)
float scaledDensity = dm.scaledDensity;
int densityDpi = dm.densityDpi; // 屏幕密度dpi(120 / 160 / 240)
// 屏幕宽度算法:屏幕宽度(像素)/屏幕密度
int screenWidth = (int) (width / density); // 屏幕宽度(dp)
int screenHeight = (int) (height / density);// 屏幕高度(dp)
Log.d("h_bl", "屏幕宽度(像素):" + width);
Log.d("h_bl", "屏幕高度(像素):" + height);
Log.d("h_bl", "屏幕密度(scaledDensity):" + scaledDensity);
Log.d("h_bl", "屏幕密度(0.75 / 1.0 / 1.5):" + density);
Log.d("h_bl", "屏幕密度dpi(120 / 160 / 240):" + densityDpi);
Log.d("h_bl", "屏幕宽度(dp):" + screenWidth);
Log.d("h_bl", "屏幕高度(dp):" + screenHeight);
}
附加两篇文章介绍今日头条适配方案:
https://mp.weixin.qq.com/s/d9QCoBP6kV9VSWvVldVVwA
https://juejin.im/post/5b6250bee51d451918537021#heading-0
主要思路为修改在activity调用onreate()时修改DisplayMetrics的density、densityDpi、scaledDensity,当时这些预期期得前期计算好。