DisplayMetrics localDisplayMetrics = new DisplayMetrics();
((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(localDisplayMetrics);
LogUtil.v(TAG, "widthPixels------------------------->" + localDisplayMetrics.widthPixels);
LogUtil.v(TAG, "heightPixels------------------------->" + localDisplayMetrics.heightPixels);
LogUtil.v(TAG, "densityDpi------------------------->" + localDisplayMetrics.densityDpi);
LogUtil.v(TAG, "density------------------------->" + localDisplayMetrics.density);
1080屏幕:
widthPixels:1920 heightPixels:1080 densityDpi:240 density:1.5 (density=240/160)
720屏幕:
widthPixels:1280 heightPixels:720 densityDpi:160 density:1
有的屏幕:
04-13 16:10:20.162 widthPixels------------------------->1920
04-13 16:10:20.162 heightPixels------------------------->1080
04-13 16:10:20.162 densityDpi------------------------->213
04-13 16:10:20.163 density------------------------->1.3312501
虽然log显示是1080的屏幕,但是屏幕密度其实不够densityDpi,标准1080的屏幕 density对应的应该是240
遇到这种屏幕,适配的时候要注意,下面几种方式选择其中一种,不可部分在代码中设置px,部分在xml中设置dp
1.全部在xml里面写dp
2.全部在代码里面写dp
3.xml中设置部分dp,代码中设置部分dp
4.全部在代码中设置UI给的px值
DisplayMetrics localDisplayMetrics = new DisplayMetrics();
((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(localDisplayMetrics);
pixelWidth = localDisplayMetrics.density * 1280;//真实的屏幕宽度
pixelHeight = localDisplayMetrics.density * 720;//真实的屏幕高度
public static int widthOf(int original) {
return (int) (pixelWidth * original / 1920);
}
public static int heightOf(int original) {
return (int) (pixelHeight * original / 1080);
}
LayoutParams regular_app1_params = (LayoutParams) mRegularAppLayout1.getLayoutParams();
regular_app1_params.leftMargin = widthOf(60);
regular_app1_params.topMargin = heightOf(144);
regular_app1_params.width = widthOf(312);