【问题标题】:How to check whether a device is tablet or handset for all devices programmatically [duplicate]如何以编程方式检查所有设备的设备是平板电脑还是手机[重复]
【发布时间】:2013-05-28 19:00:36
【问题描述】:

如何以编程方式检查所有设备和操作系统(2.2-最新)的设备是平板电脑还是手机。

【问题讨论】:

标签: android


【解决方案1】:

没有办法。您可以在 res/values 中设置布尔值

<bool name="isHandest">false</bool>

values-sw600dpvalues-sw720dpvalues-xlarge 内部

<bool name="isHandest">true</bool>

res/values

【讨论】:

  • 运行 3.0 操作系统的 7 英寸平板电脑怎么样,这行不通
  • 它应该在 values-large 上。恕我直言,7" 安卓低于 3.2,它不是平板电脑
【解决方案2】:

使用最小宽度限定符:

最小宽度限定符允许您定位具有 dp 中给出的某个最小宽度。例如,典型的 7" 平板电脑 最小宽度为 600 dp,所以如果你希望你的 UI 有两个 这些屏幕上的窗格(但较小屏幕上的单个列表),您可以 使用上一节中相同的两个布局用于单和 两窗格布局,但不是大尺寸限定符,而是使用 sw600dp 表示两窗格布局适用于在其上的屏幕 最小宽度为 600 dp

您可以在这些文件夹中使用不同的布局或设置布尔值:

<resources>
    <bool name="is_tablet">true</bool>
</resources>

来自官方文档: http://developer.android.com/training/multiscreen/screensizes.html

【讨论】:

  • 但如果操作系统低于 3.2 则无用
【解决方案3】:

如果您将平板电脑定义为屏幕大于 7 英寸的设备

public static boolean isTablet() {
    return screenSize >= 7;
}

public static double getScreenSize(Activity activity){
    DisplayMetrics dm = new DisplayMetrics();
    activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
    double x = Math.pow(dm.widthPixels/dm.xdpi,2);
    double y = Math.pow(dm.heightPixels/dm.ydpi,2);
    screenSize = Math.sqrt(x+y);        
    return screenSize;
}

【讨论】:

  • 我相信像 sw600dp 这样的“最小宽度”资源限定符不适用于 3.2 以下的 Android 版本?我不能使用 layout-large,因为屏幕尺寸为 5.4、5.8、6.3 的设备也属于该类别(而第一个三星 Galaxy Tab 认为它具有正常布局)。这是我在项目中遇到的问题,除了计算屏幕尺寸外,没有其他方法适合我。
猜你喜欢
  • 2016-11-09
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 2015-05-28
  • 2018-09-04
  • 2014-08-31
  • 1970-01-01
  • 2020-12-21
相关资源
最近更新 更多