android - 以编程方式检测 7 英寸和 10 英寸平板电脑

标签 android android-layout screen

有没有办法以编程方式查找安装应用程序的设备是 7 英寸平板电脑还是 10 英寸平板电脑?

最佳答案

您可以使用 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 以设备比例因子的形式获得屏幕的 密度,它基于 Android Design Resources对于 mdpihdpi 等。 DPI scales

float scaleFactor = metrics.density;

根据这个结果,我们可以计算出特定高度或宽度下与密度无关的像素数量。

float widthDp = widthPixels / scaleFactor
float heightDp = heightPixels / scaleFactor

您从中获得的结果将帮助您确定您正在使用的屏幕类型以及 Android Configuration examples ,它为您提供每个屏幕尺寸的相对 dp:

  • 320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
  • 480dp: a tweener tablet like the Streak (480x800 mdpi).
  • 600dp: a 7” tablet (600x1024 mdpi).
  • 720dp: a 10” tablet (720x1280 mdpi, 800x1280 mdpi, etc).

通过以上信息,我们知道如果设备的最小宽度大于 600dp,则该设备为 7"平板电脑,如果大于 720dp,则该设备为 10"平板电脑。

我们可以使用Math类的min函数计算出最小宽度,传入heightDpwidthDp 返回 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
}

这就是您计算正在使用的设备类型的方式。

关于android - 以编程方式检测 7 英寸和 10 英寸平板电脑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15055458/

相关文章:

android - Gradle 中的 Android 库可以将其他 Android 库作为依赖项吗?

android - 如何制作带有包含字母的圆圈的 CardView

java - 我的 View 不为空,文本也不为空,但我得到 : content. res.Resources$NotFoundException: String Resource ID

javascript - 如何在 babylon.js 中计算相机在屏幕中插入模型的位置?

android - 尝试在 Eclipse 3.7 中运行 Android 3.1 ContactManager 示例时出现管道错误?

java - 使用 SSL 和 Bouncy CaSTLe 进行 Android 到服务器的通信

android - ActivityManager 不保留 REAL_GET_TASKS 警告

android - 如何获取特定选定行的行 ID?

android - 屏幕支持使用 layout-large、layout-normal 和 layout-xlarge 文件夹的多个设备

android - 将屏幕录制到视频 libgdx android