2012-09-17 57 views
3

我已经实施了基于mgwt和PhoneGap的iOS应用程序。GWT,mgwt和视网膜显示屏

我有一个图像

<g:Image url="resources/img/topMenuTitle.png"></g:Image> 

和两个对应文件topMenuTitle.png(320像素由40像素)和[email protected](640像素由80px)。

我不知道什么是应用时视网膜显示器显示图像的最佳方式(即负载[email protected]当设备支持视网膜显示和topMenuTitle.png其他)。

到目前为止,我尝试使用retina.js,但它没有奏效。我的猜测是Retinajs在页面加载的时候处理图片,并且它不处理稍后会显示的图片。

回答

4

随着mgwt有一个推迟结合可变mgwt.os.它可以有不同的值:

<define-property name="mgwt.os" values="iphone, ipad, retina, ipad_retina, android, android_tablet, blackberry, desktop" /> 

您可以使用该变量并在您的应用程序中使用不同的资源。 看看顺便主题化的mgwt做是为了看如何提供不同的图像:

http://code.google.com/p/mgwt/wiki/Styling

如果你正在寻找一种简单的方式来加载,你可以这样做的图像:

OsDetection d = MGWT.getOsDetection(); 

Image img = null; 
if(d.isRetina() || isIPadRetina()){ 
    img = new Image("retinaurl"); 
}else{ 
    img = new Image("nonretinaurl"); 
} 

当然,更好的方法是使用延迟绑定,但这对您的代码中的某些图像是可以的。

+0

谢谢你的答案(和伟大的mgwt的方式),有没有一种方法来加载图像本身,而不是它的风格(即图像src不是背景图像)? –

+0

我已经更新了答案 –

+0

那么,有一些缺失。使用视网膜图像时,图像大小必须设置为一半。 – confile

3

使用DeferredBinding。这里是一个例子:

http://retina.teknonsys.com/

+0

感谢您的回复,我尝试了您的建议,但由于错误而失败(请参阅编辑的问题)。还有什么方法可以将它与UiBinder一起使用?谢谢 –

+0

在teknonsys的例子中,你不会取代bundle(它是接口),而是替换生成类的bundle工厂。 –

+0

让我的ImageResource使用'AppBundle.INSTANCE.topMenuImage()'我没有捆绑工厂。我希望我不必改变我的代码逻辑! –