2

我正在使用Scott Hanselman在此处描述的 MobileViewEngines 和51Degrees.mobi浏览器数据库来为移动和桌面浏览器呈现不同的视图。

我现在想添加一个中间立场。适用于高端移动浏览器(苹果、安卓、windows phone、一些黑莓等)。我正在考虑使用触摸屏来区分这一类别。

所以,两个问题:

  1. 如何使用 51Degrees.mobi 检测触摸屏?
  2. 触摸输入是一种很好的方法吗?(我需要桌面、高端、低端类)
4

2 回答 2

2

我在 51Degrees.mobi 工作。您可以使用以下方法检测设备是否为触摸屏Request.Browser["IsTouchScreen"]

然而,在 MVC 中优雅地使用它有点复杂。从 MobileCapableViewEngine 的来源看来,您可以通过复制移动引擎并更改 FindView 方法来制作新引擎:

public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName,
                                              string masterName, bool useCache)
    {
        string overrideViewName = controllerContext.HttpContext.Request.Browser["IsTouchScreen"] == "True"
                                      ? viewName + ".Touch"
                                      : viewName;
        ViewEngineResult result = NewFindView(controllerContext, overrideViewName, masterName, useCache);

        // If we're looking for a Touch view and couldn't find it try again without modifying the viewname
        if (overrideViewName.Contains(".Touch") && (result == null || result.View == null))
        {
            result = NewFindView(controllerContext, viewName, masterName, useCache);
        }
        return result;
    }

然后需要将这个新引擎添加到移动引擎引导程序并创建触摸视图。

不过,在执行此操作之前,您应该考虑这是否是您想要分离设备的方式。例如,诺基亚 X3-02 的屏幕相对较小,但呈现的视图与 iPad 类似。也许您应该考虑使用设备的操作系统,即Request.Browser["PlatformName"]

最后,51Degrees.mobi Foundation 第 2 版引入了我们自己的设备数据,它使用与之前不同的能力名称。您可以在 51Degrees.mobi 阅读有关它的mroe

于 2011-12-22T11:22:52.233 回答
1

大多数触摸检测都是使用 Javascript 完成的。或者CSS。

Modernizr是一个很好用的库,我认为它默认带有 MVC3。

你会这样:

html.touch div {
    width: 480px;
}

html.no-touch div {
    width: auto;
}

有关检测示例,请参阅

也许你也可以看看MVC4?他们的主要观点之一是更好的移动支持。在这里阅读。也许默认情况下添加了一些用于良好触摸检测的东西

于 2011-12-22T09:09:31.943 回答