根据用户代理 - GWT项目加载不同的.css

时间:2013-09-11 19:00:32

标签: css gwt user-agent

我开发了一个GWT应用程序,最初只适用于台式PC浏览器。现在我决定将它也用于智能手机和平板电脑。我为每个用户代理创建了一个不同的.css。现在我的问题是,如何根据用户代理的类型决定加载哪些文件?这种策略是好的还是有更好的做法?

2 个答案:

答案 0 :(得分:2)

要根据用户代理交换实现,您可以使用deferred binding,这是一个内置的GWT功能。

在你的module.gwt.xml中键入类似:

的内容
<module>
   ...
  <inherits name='com.google.gwt.sample.mobilewebapp.FormFactor'/>
  ...
  <!-- Use ClientFactoryImpl by default -->
  <replace-with class="com.google.gwt.sample.mobilewebapp.client.ClientFactoryImpl">
    <when-type-is class="com.google.gwt.sample.mobilewebapp.client.ClientFactory"/>
  </replace-with>

  <!-- Use ClientFactoryImplMobile for mobile form factor. -->
  <replace-with class="com.google.gwt.sample.mobilewebapp.client.ClientFactoryImplMobile">
    <when-type-is class="com.google.gwt.sample.mobilewebapp.client.ClientFactory"/>
    <when-property-is name="formfactor" value="mobile"/>
  </replace-with>

  <!-- Use ClientFactoryImplTablet for tablet form factor. -->
  <replace-with class="com.google.gwt.sample.mobilewebapp.client.ClientFactoryImplTablet">
    <when-type-is class="com.google.gwt.sample.mobilewebapp.client.ClientFactory"/>
    <when-property-is name="formfactor" value="tablet"/>
  </replace-with>

</module>

然后只需调用GWT.create(ClientFactory.class)即可在运行时获得正确的实现。对于CSS,请使用CSSResource或ClientBundle的子类。 Source is here.

答案 1 :(得分:1)

我正在使用mgwt创建移动广告应用。

有一个基于用户代理的主题:https://code.google.com/p/mgwt/source/browse/src/main/java/com/googlecode/mgwt/ui/client/theme/MGWTThemeBaseThemeStandardImpl.java

在你的Bundle中你可以分开不同的CSS。如果您不使用CssResources,您可以使用StyleInjector