我正在为两个特定设备编写应用程序
Samsung Galaxy Note 10.1 10inch
在我的代码中,我想为一个小模块为每个设备编写不同的代码,但我无法区分这两个
我用过
double density = getResources().getDisplayMetrics().density;
但两者都返回相同 的 1.3312500715255737
使用getDisplayMetrics()
我试图获得解决方案,但它同样返回
1280×720
那么我在代码中使用什么来区分这两个设备?
答案 0 :(得分:3)
您可以使用DisplayMetrics获取有关您的应用运行的屏幕的大量信息。
首先,我们创建一个DisplayMetrics指标对象:
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int wwidth = displaymetrics.widthPixels;
这将返回宽度和高度的绝对值(以像素为单位),因此对于Galaxy SIII,Galaxy Nexus等1280x720。
这通常不会有帮助,因为当我们处理Android设备时,我们通常更喜欢使用与密度无关的像素,dip。
float scaleFactor = displaymetrics .density;
从这个结果中,我们可以计算出一定高度或宽度的密度无关像素的数量。
float widthDp = widthPixels / scaleFactor
float heightDp = heightPixels / scaleFactor
使用上述信息,我们知道如果设备的最小宽度大于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“屏幕。
除了这些方法之外,如果您需要知道设备的确切尺寸(以英寸为单位),您也可以使用指标方法计算每英寸屏幕的像素数。
float widthDpi = displaymetrics .xdpi;
float heightDpi = displaymetrics .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
}