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

2023-11-22

有没有办法以编程方式查找安装应用程序的设备是 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 中工作。

You get the density of the screen using metrics again, in the form of a scale factor for the device, which is based on the Android Design Resources for mdpi, hdpi etc. DPI scales

float scaleFactor = metrics.density;

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

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

从中获得的结果将帮助您决定与什么类型的屏幕一起使用Android 配置示例,它为您提供每个屏幕尺寸的相对 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 英寸平板电脑。

我们可以使用以下公式计算出最小宽度min的函数Math类,通过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
}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式检测 7 英寸和 10 英寸平板电脑 的相关文章

  • 更改首选项的背景颜色

    我有一个PreferenceCategory xml 文件 我已经在其中定义了所有首选项 我从扩展的类中调用它PreferenceActivity 我无法设置设置屏幕的背景 该屏幕是在如下所示的 xml 文件的帮助下显示的 请看我已经定义了
  • 更改操作栏标题文本颜色

    我正在尝试更改 ActionBar 中标题文本的颜色 但我似乎无法让它工作 这是我尝试使用的风格 在我的应用程序主题中我使用titleTextStyle
  • Android 构建 gradle 在特定设备上失败

    我面临一个奇怪的问题 当我编译我的应用程序以在 Android 7 0 的设备上运行它时 它可以工作 但是当我尝试为 Android 4 2 1 的设备进行编译时 它会失败并出现以下错误 错误 任务 app transformClasses
  • Sqlite 查询检查 - 小于和大于

    return mDb query DATABASE TABLE new String KEY ROWID KEY LEVEL KEY LEVEL gt 3 lt 5 null null null null 我究竟做错了什么 它返回的值全部高
  • ActionBarCompat 支持库 android:selectableItemBackground 不起作用

    我正在使用新的 ActionBarCompat 支持库 操作栏中的操作按钮在按下时应更改其背景 它适用于 Android 4 3 但不适用于 Gingerbread 在姜饼中 如果我按下按钮 它不会改变背景 我什至改变了选择器 它再次适用于
  • 如何在 Android 中创建刮刮卡?

    我需要为我在学校的期末项目创建一个 刮刮卡 应用程序 但找不到如何实现刮刮事件的方法 如何创建背景图像并在其上放置灰色矩形 所以当我刮刮这些矩形时我会看到他们下面的图片 实现必须在 Android 中 因为我还不知道如何在 Objectiv
  • 在 Android 中关闭 Spinner 中的下拉菜单

    在 Android 中打开和关闭微调器时 我需要为箭头图标设置动画 打开微调器时我可以旋转箭头 我只是放了一个setOnTouchListener on the Spinner 当下拉菜单关闭或隐藏时 问题就来了 因为我不知道如何在该操作上
  • Android Things 文件系统

    我正在 Android 上构建这个应用程序 我希望能够让它访问 U 盘上的媒体文件 甚至树莓派的 SD 卡上的媒体文件 我还不知道我将如何处理这些文件 但我只是想知道它是否可能 如果不是这样也没关系 我还有其他解决方案 但我想我会先从明显的
  • 如何在Firebase Android应用程序中分离两个不同的用户?

    我有一个应用程序 有两种不同类型的用户 一种是教师 第二种是普通用户 如果普通会员登录 他会去normal memberActivity如果他是教师会员 他会去Teacher memberActivity 我如何在登录活动中执行此操作 我的
  • Android 在创建时出现 SQLiteException

    首先我想说我是android新手 所以如果这个问题太愚蠢我很抱歉 我正在为带有两个表的 SQLite 数据库编写一个内容提供程序 表格上是在导航抽屉活动中显示列表 第二个表格是在 ListFragment 中显示 每次启动应用程序时 我都会
  • 如何在代码中设置TextView的文字颜色?

    在 XML 中 我们可以通过以下方式设置文本颜色textColor属性 比如android textColor FF0000 但如何通过编码来改变它呢 我尝试过类似的东西 holder text setTextColor R color R
  • 如何在不改变的情况下将字符串转换为字节?

    我需要一个解决方案将字符串转换为字节数组而不需要像这样进行更改 Input String s Test Output String s Test byte b Test 当我使用 s getBytes 那么回复是 B 428b76b8 但我
  • 如果联系人与电话通讯录中的应用程序关联,则显示应用程序图标

    我正在尝试显示与该应用程序关联的电话号码的应用程序图标 我试着跟随this http www c99 org 2010 01 23 writing an android sync provider part 1 链接但是太难了 有没有任何库
  • Android 将菜单项在操作栏中向左对齐

    我的应用程序中有一个操作栏 它显示我定义的菜单项res menu activity main xml 我的菜单项在操作栏上向右对齐 我希望它们左对齐 我为此找到的唯一解决方案使用了自定义操作栏 如下所示 将菜单项放置在 Honeycomb
  • 如何使用asynctask显示倒计时的进度条?

    在我的应用程序中 我希望用户按下按钮 然后等待 5 分钟 我知道这听起来很糟糕 但就这样吧 5 分钟等待期间的剩余时间应显示在进度条中 我使用带有文本视图的 CountDownTimer 来倒计时 但我的老板想要看起来更好的东西 这就是进度
  • Android 视图和视图组

    在安卓中ViewGroup继承自View A ViewGroup是一个容器 里面装有Views ViewGroup LinearLayout View TextView 为什么 Android 的人们将这种关系定义为Inheritance而
  • 如何用 XML 制作双渐变(类似 iphone)

    如何使用 XML 制作这种可绘制渐变 我可以做一个从颜色 A 到颜色 B 的简单渐变 但我不知道如何在同一个可绘制对象中组合两个渐变 我终于找到了一个带有图层列表的解决方案 这对我来说已经足够好了
  • 如何手动添加Android Studio依赖

    我多次尝试向我的项目添加依赖项 但每次都会出现错误 我想添加它们的依赖项是 de hdodenhof circleimageview 1 3 0 and com github bumptech glide glide 3 6 1 所以我想下
  • SambaFileInputStream 和 FileInputStream 有什么不同?

    我需要从 samba 服务器流式传输视频 并且我使用 nanohttpd 在我的项目中创建简单的服务器 当我使用本地文件中的 fileinputstream 时 视频视图可以按设置播放视频 http localhost 8080 publi
  • android-如何在谷歌地图上将标记的位置显示为地址

    我已经尝试过 commonsware googlemapsv2 教程 特别是在地图上拖动标记 但现在另一个问题困扰着我 问题是如何将标记的当前位置显示为地图下方或上方的地址 字符串 这是我使用的代码 public class MainAct

随机推荐

  • Java.util.scanner 错误处理

    我正在帮助一个朋友解决java问题 然而 我们遇到了障碍 我们使用 Java Util Scanner nextInt 从用户那里获取一个号码 不断询问用户是否提供了其他信息 唯一的问题是 我们不知道如何进行错误处理 我们尝试过的 do i
  • 使用 Google 广告通过 PhoneGap 应用获利(使用 PhoneGap Build 构建)

    在 AdMob 上 有不再有 HTML5 应用程序的选项 以及 AdSense 移动应用 甚至是基于 webview 的应用 明确提及 被禁止 如何使用 Google 广告通过 PhoneGap 应用 使用 PhoneGap Build 构
  • 未捕获的引用错误:尝试在 Chrome 中的另一个 Worker 中创建 Worker 时未定义 Worker

    This link says 如果工人们愿意的话 他们可以产生更多的工人们 所谓的副工 必须与父页面托管在同一源中 另外 子工作人员的 URI 是相对于父工作人员的 URI 进行解析的 位置而不是所属页面的位置 这使得更容易 工作人员跟踪他
  • 缩放 matplotlib 中的插图,无需重新绘制数据

    我正在处理一些 matplotlib 图 需要有一个缩放的插图 这是可能的zoomed inset axes来自axes grid1工具包 参见示例here import matplotlib pyplot as plt from mpl
  • 高效交易,记录锁定

    我有一个存储过程 它选择 1 条记录 可以从不同 PC 上的多个不同应用程序调用存储过程 这个想法是 存储过程带回需要处理的下一条记录 如果两个应用程序同时调用存储过程 则不应带回同一条记录 我的查询如下 我正在尝试尽可能高效地编写查询 s
  • 如何在 JavaFX 中添加 UTF-8 以实现非英语支持?

    我想在 JavaFX 中添加 UTF 8 波斯语字符 但是当我添加带有波斯语内容的标签时 它会显示一些奇怪的结果 我是否必须使用特定的插件或配置来处理此问题 波斯语是从右到左吗 在这种情况下 您希望使用 JavaFX 版本RTL 支持 那就
  • AddFavorite JS 不适用于 chrome

    我正在开发一个带有书签功能的网站 我正在使用这个功能window external AddFavorite location href document title 对于 chrome 和 IE 它在 IE 中工作正常 但对于 chrome
  • C# .Net 4.5 PropertyGrid:如何隐藏属性

    问题很简单 我希望这有一个简单的解决方案 我想在属性 Element 在我的 PropertyGrid 对象中 为零时隐藏 Browsable false public class Question public int Element g
  • 无法使用 go 和 docker 连接到 mysql 服务器 - 拨号 tcp 127.0.0.1:3306: connect: 连接被拒绝

    我在我的 Mac 上安装了 Mysql 社区服务器 它已设置并正在运行 我可以使用 Navicat for MySQL 在 localhost 3306 上连接到它 但是 每当我尝试从使用 docker compose 运行的 go 应用程
  • 将项目添加到 Endless Scroll RecyclerView 中,进度条位于底部

    我遵循 Vilen 对 SO 的出色回答 将不确定的进度条作为 RecyclerView 网格中的页脚关于如何使用 ProgressBar 实现无限滚动回收器视图 我自己实现了它并且它有效 但我想扩展这个例子 我想在 recyclervie
  • 如何使用 HttpsUrlConnection 代替 DefaultHttpClient

    DefaultHttpClient ThreadSafeClientConnManager HttpParams HttpProtocolParams SchemeRegistry SSLSocketFactory NameValuePai
  • 解决 PermGen 问题的各种选项

    我正在研究 Java 6 18 VM 上垃圾收集的各种选项 并且想要一些指导 我们在 JBoss 上运行应用程序 在重新部署期间偶尔会出现臭名昭著的 PermGen 错误 互联网上有很多关于解决或缓解此问题的最佳方法的相互矛盾和过时的信息
  • Facebook 错误“应用程序未设置:仍处于开发模式”

    我知道已经有很多与此相关的问题 但我找不到一个可以准确回答我当前问题的问题 实际上 2 天前 我的应用程序完美运行 Facebook 登录和注册 但现在它显示以下错误 我已经完成了所有必需的步骤 并且运行完美 登录 Facebook 开发者
  • Kestrel服务器:如何将不同的端口绑定到不同的控制器?

    Kestrel 有没有办法监听 2 个端口 例如80和81 并为每个端口指定不同的控制器 我遇到的情况是 有 2 个控制器 一个用于需要基于令牌的身份验证的最终用户请求 另一个控制器用于基于机器的代理 我想在其中强制执行基于客户端证书的身份
  • iOS 后台视频合并

    Task 将传单图像合并到传单视频中 Cases 创建传单 添加表情图像 文本 等 创建视频 Case1 按后退按钮 用户将转到传单屏幕的应用程序列表 在此期间我们将 FlyerSnapShoot 合并到 FlyerVideo and它工作
  • 自动关闭QMessageBox

    我正在构建一个 Qt Symbian 项目 我想向用户显示一条通知 该通知应在几秒钟后自动关闭 我看到诺基亚在他们的用户界面中经常使用这个 现在我正在使用下面的代码 以便用户可以关闭 QMessageBox 但如果可以在 1 或 2 秒后自
  • datagridview行单击

    我有一个 datagridview 里面充满了来自数据库的数据 我需要这样做 当单击数据网格中的一行时 包含该行数据的所有字段都将位于其他文本框或其他内容中 怎么办呢 提前致谢 On your CellClick事件 执行 introwIn
  • 使用旧版本.NET框架编译的程序集会影响整体性能吗?

    假设我们有两个程序集 Foo Logic 在 NET 2 0框架上编译 Foo Application 在 NET 4 0框架上编译 有参考并使用编译的Foo Logic 它对 Foo Application 性能有影响 或有任何其他缺点
  • 如何在 Zsh 提示符中显示电池状态

    我认为答案是不言自明的 我一直在寻找已经可以做到这一点的软件 但我还没有找到任何运气 它要么不是在 Zsh 中完成 要么是针对另一个应用程序 例如 tmux 重点是我还没找到它 所以我的问题是 是否已经有一个预先制作的脚本可以做到这一点 如
  • 以编程方式检测 7 英寸和 10 英寸平板电脑

    有没有办法以编程方式查找安装应用程序的设备是 7 英寸平板电脑还是 10 英寸平板电脑 您可以使用DisplayMetrics获取有关您的应用程序运行的屏幕的大量信息 首先 我们创建一个DisplayMetrics指标对象 DisplayM