有两种方式:
方式一:(可以使用,但是已经不推荐使用了)
WindowManager mWindowManager;
mWindowManager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
mWindowManager.getDefaultDisplay().getWidth();
mWindowManager.getDefaultDisplay().getHeight()
方式二:(目前android推荐使用的方式)
WindowManager mWindowManager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics metrics = new DisplayMetrics();
mWindowManager.getDefaultDisplay().getMetrics(metrics);
int width = metrics.widthPixels;//获取到的是px,像素,绝对像素,需要转化为dpi
int height = metrics.heightPixels;
px与dpi的相互转化
px描述:The absolute height of the display in pixels.
px(pixels)像素,是屏幕的绝对像素,屏幕有多少个像素就是多少像素.
dip(device independent pixel)设备独立像素,与像素无关 .
fun pxToDip(scale: Float, px: Int): Int {
return (px / scale + 0.5f) as Int
}
fun dipToPx(scale: Float, dpi: Int): Int {
return (dpi * scale + 0.5f) as Int
}
总结:
densityDpi 每英寸多少个像素点,
density = densityDpi /160
APP根据densityDpi的大小决定调用哪个文件夹下的图片,关系如下:
drawable-ldpi 底密度,通常是指120
drawable-mdpi 中等密度,通常是指160
drawable-xhdpi 超高密度,通常是指320
px = dip*density
分辨率的概念
现在人们经常把320*240成为 分辨率,其实是不准确的,这仅仅是图片的像素点总数罢了,分辨率的概念是每英寸上的像素点数,单位为dpi.
一般图片的dpi为96DPI。这个单位与ps下的有出入,但都是一回事。