我开发了一个GWT应用程序,最初只适用于台式PC浏览器。现在我决定将它也用于智能手机和平板电脑。我为每个用户代理创建了一个不同的.css。现在我的问题是,如何根据用户代理的类型决定加载哪些文件?这种策略是好的还是有更好的做法?
答案 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创建移动广告应用。
在你的Bundle中你可以分开不同的CSS。如果您不使用CssResources,您可以使用StyleInjector