这对我来说也有点困惑。但是在不同的设备上运行这些功能,我掌握了它,现在一切都清楚了。希望这对你也有帮助。
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int width = metrics.widthPixels;
//注意:以上公式为您提供值:对于三星 Galaxy sIII:720 * 1280 对于三星 4g LTE 平板电脑:800 x 1232
因此,您会想知道这两种设备的高度几乎相同。但这不是它的工作方式。您必须使用下面的函数“convertPixelsToDp”来获得实际的 dp。
public static float convertPixelsToDp(float px,Context context)
{
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float dp = px / (metrics.densityDpi / 160f);
return dp;
}
因此,使用此公式后,它将为您提供三星 Galaxy sIII 的 360*640。
//To convert dp back to pixel
public static float convertDpToPixel(float dp,Context context){
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = dp * (metrics.densityDpi/160f);
return px;
}
//This will give you ratio
// For Samsung Galaxy sIII : ratio is 2 (320/160)
float d = getApplicationContext().getResources().getDisplayMetrics().density;
// will either be DENSITY_LOW, DENSITY_MEDIUM or DENSITY_HIGH
//For Samsung Galaxy sIII : 320 dpi
int dpiClassification = metrics.densityDpi;