计算的方法
手机屏幕的大小是指 手机屏幕 对角线 的长度,单位为 英寸 或 吋。
对角线的长度
L
L
L (英寸)
屏幕宽
W
W
W (英寸)
屏幕高
H
H
H (英寸)
L = W 2 + H 2 L = \sqrt{W^2 + H^2} L=W2+H2
如何获取屏幕的宽度(英寸),获取屏幕的高度(英寸)?
我们能获取到数据:
- 屏幕的宽高,单位是像素 (pixels):widthPixels,heightPixels,对应下面代码中的
point.x
和point.y
- 每英寸的像素数:xdpi (宽)和 ydpi (高),对应下面代码中的
metrics.xdpi
和metrics.ydpi
屏幕的宽度(英寸) w i d t h I n c h = w i d t h P i x e l s x d p i widthInch = \frac{widthPixels}{xdpi} widthInch=xdpiwidthPixels
屏幕的宽度(英寸) h e i g h t I n c h = h e i g h t P i x e l s y d p i heightInch = \frac{heightPixels}{ydpi} heightInch=ydpiheightPixels
屏幕的尺寸(英寸) S c r e e n S i z e = w i d t h I n c h 2 + h e i g h t I n c h 2 ScreenSize = \sqrt{widthInch^2 + heightInch^2} ScreenSize=widthInch2+heightInch2
Java 代码实现
point.x
:屏幕的宽度,单位是像素
point.y
: 屏幕的高度,单位是像素
metrics.xdpi
:宽度上,每英寸像素数
metrics.ydpi
:高度上,每英寸像素数
point.x / metrics.xdpi
是以 英寸 为单位的宽度
point.y / metrics.ydpi
是以 英寸 为单位的高度
getRealSize(point)
可以获取到屏幕中状态栏(status bar)的高度
public static double calcScreenSize(Activity activity) {
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
Point point = new Point();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
activity.getDisplay().getRealSize(point);
} else {
activity.getWindowManager().getDefaultDisplay().getSize(point);
}
double w = point.x / metrics.xdpi; // unit is inch
double h = point.y / metrics.ydpi; // unit is inch
double size = Math.sqrt(w * w + h * h);
Log.d(TAG, String.format("Screen size: %.1f", size));
return size;
}
Kotlin 代码实现
fun calcScreenSize(): Double {
val metrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(metrics)
val point = Point()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
display?.getRealSize(point)
} else {
windowManager.defaultDisplay.getSize(point)
}
val w: Double = (point.x / metrics.xdpi).toDouble() // unit is inch
val h: Double = (point.y / metrics.ydpi).toDouble() // unit is inch
val size = Math.sqrt(w * w + h * h)
Log.d(TAG, String.format("Screen size: %.1f", size))
return size
}