我正在使用GWT Generators并希望使用Generator修改css文件。 css文件包含如下所示的常量(test / client / App.css):
@def LINE_WIDTH 100px;
我定义了一个接口(test / client / DeviceDensity.java):
public interface DeviceDensity extends CssResource {
String APP_CSS = "test/client/App.css";
}
使用gwt生成器我想将常量 LINE_WIDTH 修改为75px,100px,150px或200px;取决于属性 phone.density 的值,该属性在模块文件中定义为:
<define-property name="phone.density" values="lpdi,mdpi,hpdi,xhdpi" />
<property-provider name="phone.density"><![CDATA[
{
var ratio = window.devicePixelRatio;
if (ratio == 0.75) { return "lpdi"; }
else if (ratio == 1) {return "mdpi"; }
else if (ratio == 1.5) {return "hpdi"; }
return "xhdpi";
}
]]></property-provider>
如何在生成器中获取phone.density的值?如何修改css常量LINE_WIDTH?
答案 0 :(得分:0)
如何在生成器中获取phone.density的值?
可能不是你想要的那么简单,但你可以这样做:
为每个电话密度值创建一个基类com.gwt.demo.client.PhoneDensity
并为其创建一个子类,如下所示。
public class PhoneDensity {}
public class PhoneDensityLpdi extends PhoneDensity{}
public class PhoneDensityMdpi extends PhoneDensity{}
public class PhoneDensityHpdi extends PhoneDensity{}
public class PhoneDensityXhdpi extends PhoneDensity{}
将此添加到您的gwt.xml:
<define-property name="density" values="lpdi,mdpi,hpdi,xhdpi" />
<property-provider name="density"><![CDATA[
{
var ratio = window.devicePixelRatio;
if (ratio == 0.75) { return "lpdi"; }
else if (ratio == 1) {return "mdpi"; }
else if (ratio == 1.5) {return "hpdi"; }
return "xhdpi";
}
]]></property-provider>
<replace-with class="com.gwt.demo.client.PhoneDensityLpdi">
<when-type-is class="com.gwt.demo.client.PhoneDensity" />
<when-property-is name="density" value="lpdi" />
</replace-with>
<replace-with class="com.gwt.demo.client.PhoneDensityMdpi">
<when-type-is class="com.gwt.demo.client.PhoneDensity" />
<when-property-is name="density" value="mdpi" />
</replace-with>
<replace-with class="com.gwt.demo.client.PhoneDensityHpdi">
<when-type-is class="com.gwt.demo.client.PhoneDensity" />
<when-property-is name="density" value="hpdi" />
</replace-with>
<replace-with class="com.gwt.demo.client.PhoneDensityXhdpi">
<when-type-is class="com.gwt.demo.client.PhoneDensity" />
<when-property-is name="density" value="xhdpi" />
</replace-with>
在您的客户端代码中:
// this is the magical line to read the phone density
PhoneDensity phoneDensity = GWT.create(PhoneDensity.class);
String density = null;
if (phoneDensity instanceof PhoneDensityLpdi) {
density = "lpdi";
} else if (phoneDensity instanceof PhoneDensityMdpi) {
density = "mdpi";
} else if (phoneDensity instanceof PhoneDensityHpdi) {
density = "hpdi";
} else {
density = "xhdpi";
}
您将根据手机密度值获得
PhoneDensity
的实例。
阅读Elements for Deferred Binding部分。
有关上述方法的详细讨论,请查看以下主题
如何修改css常量LINE_WIDTH?
现在,您在客户端JAVA代码中拥有手机密度的值。将此值移至常量文件而不是css,您可以在@eval
中使用UIBinder
示例代码:
<ui:style>
@eval phoneDensity com.gwt.demo.client.Styles.INSTANCE.phoneDensity();
.widget{ width: phoneDensity; }
</ui:style>
请看下面的帖子。用一些替代解决方案解决这个问题可能会有所帮助。