【问题标题】:How can I detect if a device has a touch screen in Titanium?如何检测设备是否在 Titanium 中具有触摸屏?
【发布时间】:2012-08-14 01:38:12
【问题描述】:

我的目标是使用 Titanium 的 Android。如何判断设备是否有触摸屏?

【问题讨论】:

    标签: javascript android titanium appcelerator-mobile


    【解决方案1】:

    最简单的方法是测试触摸事件支持。如果它们受支持,则设备可能具有触摸屏。如果没有,它可能不会,或者你无论如何都不能使用它们。一种解决方案是:

    var touchSupported = ('ontouchstart' in window);
    

    但要小心,因为浏览器可能支持触摸事件但设备可能不支持(例如,Chrome 20 在没有触摸的设备中支持大量触摸事件)。

    您可以让用户点击一个按钮,看看是触发了触摸事件还是只是点击了一次。

    【讨论】:

    • 不幸的是,这不起作用。我应该提到 Titanium 不使用“标准”事件名称。不过还是谢谢你。
    • “让用户点击按钮”的想法怎么样?
    • 我确实考虑过这一点,但我找到了一种透明的方法(我的回答)。
    • 太好了!可能应该在附加侦听器之前测试触摸事件支持。
    • 我发现监听器一直存在(在非触控设备上还没有抛出异常)。如果没有触摸支持,它就不会触发。是的,我知道:Titanium 有一个不稳定的 API
    【解决方案2】:

    这是我想出的解决方案。这真的很愚蠢,但它确实有效。无论您在何处创建应用程序窗口,都添加以下代码:

    function touchStart(){
        Titanium.App.Properties.setBool("touch", true);
    
        self.removeEventListener("touchstart", touchStart);
    }
    
    self.addEventListener("touchstart", touchStart);
    

    self 替换为您的窗口名称。现在,第一次检测到触摸事件时,将设置应用程序属性。

    稍后,检查是否存在触摸:

    var touchSupported = Titanium.App.Properties.getBool("touch", false);
    

    如果您在模拟器上对此进行测试,即使您更改“设备”,该属性也可能会持续存在。所以在其他任何东西之前添加这一行:

    Titanium.App.Properties.setBool("touch", false);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 2011-04-27
      • 2023-03-02
      • 1970-01-01
      相关资源
      最近更新 更多