您可以使用DisplayMetrics 获取有关您的应用正在运行的屏幕的大量信息。
首先,我们创建一个DisplayMetrics 指标对象:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
由此,我们可以得到显示尺寸所需的信息:
int widthPixels = metrics.widthPixels;
int heightPixels = metrics.heightPixels;
这将返回以像素为单位的宽度和高度的绝对值,因此 Galaxy SIII、Galaxy Nexus 等为 1280x720。
这本身通常没有帮助,因为当我们在 Android 设备上工作时,我们通常更喜欢在与密度无关的像素中工作,dip。
您再次使用metrics 以设备比例因子的形式获得屏幕的density,它基于mdpi、hdpi 等的Android Design Resources。
float scaleFactor = metrics.density;
根据这个结果,我们可以计算出特定高度或宽度下与密度无关的像素数量。
float widthDp = widthPixels / scaleFactor
float heightDp = heightPixels / scaleFactor
您从中获得的结果将帮助您确定正在使用的屏幕类型以及 Android Configuration examples,它为您提供每种屏幕尺寸的相对 dp:
- 320dp:典型的手机屏幕(240x320 ldpi、320x480 mdpi、480x800 hdpi 等)。
- 480dp:类似于 Streak (480x800 mdpi) 的补间平板电脑。
- 600dp:7 英寸平板电脑 (600x1024 mdpi)。
- 720dp:10 英寸平板电脑(720x1280 mdpi、800x1280 mdpi 等)。
通过以上信息,我们知道如果设备的最小宽度大于 600dp,则该设备为 7" 平板电脑,如果大于 720dp,则该设备为 10" 平板电脑。
我们可以使用Math类的min函数计算出最小宽度,传入heightDp和widthDp以返回smallestWidth。
float smallestWidth = Math.min(widthDp, heightDp);
if (smallestWidth > 720) {
//Device is a 10" tablet
}
else if (smallestWidth > 600) {
//Device is a 7" tablet
}
但是,这并不总是给您一个完全匹配的结果,尤其是在使用不起眼的平板电脑时,这些平板电脑可能会将其密度错误地表示为 hdpi,而实际上它不是,或者可能只有 800 x 480 像素但仍然在7" 屏幕。
除了这些方法之外,如果您需要知道设备的确切尺寸(以英寸为单位),您也可以使用metrics 方法来计算每英寸屏幕有多少像素。
float widthDpi = metrics.xdpi;
float heightDpi = metrics.ydpi;
您可以根据设备每英寸的像素数以及总像素数来计算设备的英寸数。
float widthInches = widthPixels / widthDpi;
float heightInches = heightPixels / heightDpi;
这将返回设备的高度和宽度(以英寸为单位)。这对于确定它是什么类型的设备并不总是那么有帮助,因为设备的广告尺寸是对角线,我们所拥有的只是高度和宽度。
但是,我们也知道,给定三角形的高度和宽度,我们可以使用勾股定理计算出斜边的长度(在这种情况下,是屏幕对角线的大小)。
//a² + b² = c²
//The size of the diagonal in inches is equal to the square root of the height in inches squared plus the width in inches squared.
double diagonalInches = Math.sqrt(
(widthInches * widthInches)
+ (heightInches * heightInches));
由此我们可以判断设备是否是平板电脑:
if (diagonalInches >= 10) {
//Device is a 10" tablet
}
else if (diagonalInches >= 7) {
//Device is a 7" tablet
}
这就是您计算正在使用的设备类型的方式。