【问题标题】:How to find out if application is running on tablet or mobile device in android?如何确定应用程序是否在 Android 的平板电脑或移动设备上运行?
【发布时间】:2014-02-10 06:05:14
【问题描述】:

我正在开发一个兼容手机屏幕和平板屏幕的安卓应用程序。

所以我为每个创建了 4 个不同的屏幕。那是

  1. login_portrait.xml
  2. login_landscape.xml
  3. login_portrait_large.xml
  4. login_landscape.xml

但问题是如何发现我的任何用户使用的应用程序正在使用平板电脑或移动设备?

有什么解决办法吗?

【问题讨论】:

标签: android xml graphics tablet


【解决方案1】:

您可以将 XML (bools.xml) 文件放在以下文件夹中

  1. values-large
  2. values-xlarge
  3. values-normal
  4. values-small

对于values-large/bools.xmlvalues-xlarge/bools.xml

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

对于values-normal/bools.xmlvalues-small/bools.xml

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

然后以编程方式确定,

boolean isTablet = context.getResources().getBoolean(R.bool.tablet);

【讨论】:

  • 画面布局是否需要改变?
  • @NiravDabhi 不需要。
  • 很高兴知道!请标记检查按钮:)
  • 先生,我的问题是当我在平板电脑上运行它时,我的应用程序不幸停止了!
  • 哦。能发一下logcat吗?
【解决方案2】:

我用这个方法:

public static boolean isTablet(Context mContext){
    return (mContext.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;
}

这就够了,如果返回false那么你的设备就是手机。

更多信息: How to detect device is Android phone or Android tablet?

【讨论】:

  • 亲爱的XML布局文件有什么需要改的吗?
  • 我使用了使用xml布局或在资源中存储变量的方法,但这是不正确的,每天我们都有不同分辨率的手机设备,这对于某些设备是无法实现的。
  • 是的,我也面临同样的问题。但我的要求是我的应用程序应该在手机屏幕和平板电脑屏幕上运行而不会重叠。还有其他解决方案吗?
【解决方案3】:

您可以通过Using configuration qualifiers 实现此目的。将不同的 .xml 布局文件专门放在以下res 文件夹中,android 会为您完成。

res/layout-small/login.xml             // login layout for small portrait
res/layout-normal/login.xml             // login layout for normal portrait
res/layout-normal-land/login.xml       // login layout for normal land
res/layout-large/login.xml        // login layout for large portrait
res/layout-large-land/login.xml    // login layout for large land

您可以只使用 login.xml,android 会为您选择合适的。

注意。对于 android 3.2 或更高版本,使用了新的配置限定符系统。你可以从官方开发指南中阅读more

编辑: 顺便说一句,每个屏幕尺寸定义为:

  • xlarge 屏幕至少为 960dp x 720dp
  • 大屏幕至少为 640dp x 480dp
  • 普通屏幕至少为 470dp x 320dp
  • 小屏幕至少为 426dp x 320dp

它们有时会重叠,请阅读this 了解更多信息。

【讨论】:

  • 我已经完成了。 bt 我不知道如何找出屏幕是大是小
  • 如果您确实关心屏幕尺寸是否小(默认不够),您可以创建一个名为layout-small的新布局文件夹
  • 我已经这样做了。问题是如何在代码中获取屏幕尺寸/
  • 不需要屏幕尺寸。我希望我的应用程序同时在中大屏幕上运行。
  • @NiravDabhi 中等?您是指 7 英寸平板电脑还是手机?
【解决方案4】:

您可能需要在问题中包含更多信息。

您是否根据手机或平板电脑收集数据?如果是这样,您可能需要使用 Javascript 来检测分辨率stack overflow question

那个,或者你可以只检测“用户代理”。

如果您需要根据浏览器类型使应用程序更具响应性,请尝试使用 twitter-bootstrap: twitter-bootstrap

【讨论】:

  • 首先我创建了适合移动屏幕的设计,然后我在不适合的平板电脑上进行了测试。所以我创建了应用程序的四个设计。
  • 好的,我明白了。如果您需要创建更多响应式应用程序,我会考虑实施“网络视图”应用程序:mkyong.com/android/android-webview-example 这或多或少是当今专业的做法。您的 android 应用程序将指向一个 URL,加载它,它可以通过 Javascript 与您的本机 android 应用程序交互。然后,您可以使用 Javascript 库(例如 Twitter-Bootstrap)来处理基于浏览器分辨率的响应。我不知道这是否对您当前的实施有所帮助,但您最终可能需要这样做。
  • Web 视图不是解决方案先生。当我们从 URL 加载数据时,它是最好的选择。但是当我们有许多小部件时如何实现。
  • 好的,先生。我正在尝试按照您的建议,这将需要对我的应用进行重大更改。
  • 我知道这可能不是您尝试完成的最佳解决方案。但建议实现的优点是它与平台无关,您可以根据您的应用程序是基于 Web、Android、Windows 还是基于 iOS 来更改样式和 CSS。尽管您的应用程序可能需要进行一些重大更改,但从长远来看,建议的解决方案在可扩展性和可重用性方面可能确实有帮助。缺点是如果您的服务器没有可用的连接,您可能不得不依赖缓存的数据。无论如何,我希望这些信息对您有所帮助。
【解决方案5】:
public static boolean isTablet(Context context) {
    return (context.getResources().getConfiguration().screenLayout
            & Configuration.SCREENLAYOUT_SIZE_MASK)
            >= Configuration.SCREENLAYOUT_SIZE_LARGE;
}

您也可以将它放在 Base class 中并对其进行保护,这样您就可以在扩展您的 base class 的所有活动中重复使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    相关资源
    最近更新 更多