Titanium Mobile Web App - 闪烁背景

时间:2013-09-04 09:31:49

标签: web-applications titanium background-image titanium-alloy

有一个非常奇怪的问题,

在我的主窗口上,我有一个backgroundImage

然而,每当我点击屏幕上的任何地方,或尝试在文本区域中聚焦时,它就会闪烁

我添加了一段视频来展示其行为

http://www.youtube.com/watch?v=W01vUQ_9DjY

窗口上唯一的样式是:

"#main": {
    backgroundColor:"#f4b7d1",
    backgroundImage: "/images/bg.png"
}

我也试过

"#main": {
    backgroundColor:"#f4b7d1",
    backgroundImage: "/images/bg.png",
    backgroundFocusedImage: "/images/bg.png",
    backgroundSelectedImage: "/images/bg.png"
}

任何帮助将不胜感激,谢谢

1 个答案:

答案 0 :(得分:2)

我也遇到了这个问题。

根本原因是,无论实际属性是否已更改,Titanium都会在每次点击事件后重新分配backgroundImage属性。

要解决此问题,您可以破解处理backgroundImage更新的Element.js文件。

编辑可以应用于两个地方之一(仅在Windows上测试,版本3.1.3.GA):

  1. %ProjectFolder%\build\mobileweb\titanium\Ti\_\UI\Element.js

    这里我们正在编辑生成的JS文件,这必须在每次构建之后完成。如果您不想编辑实际的Titanium SDK并且只想在最终版本上进行修复,则此选项可能很有用。

  2. C:\%USER FOLDER%\App Data\Roaming\Titanium\mobilesdk\win32\3.1.3.GA\mobileweb\titanium\Ti\_\UI\Element.js

    如果编辑此文件,则实际上是在更改Titanium SDK。升级到新的SDK版本时,您只需重复此编辑。

  3. 选择您的文件,然后从第534行开始应用此编辑:

    变化:

    bi = style.url(bi);
    nodeStyle.backgroundImage.replace(/'|"/g, '').toLowerCase() !== bi.toLowerCase() &&(nodeStyle.backgroundImage = bi);
    

    要:

    bi = style.url(bi);
    var currentB = nodeStyle.backgroundImage;
    var ind=currentB.lastIndexOf("/");
    var ind2= bi.lastIndexOf("/");
    if(nodeStyle.backgroundImage.substr(ind) !== bi.substr(ind2))
    {
           nodeStyle.backgroundImage.replace(/'|"/g, '').toLowerCase() !== bi.toLowerCase() && (nodeStyle.backgroundImage = bi);
    }
    

    此修复导致Titanium仅在背景图像的文件名更改时重置backgroundImage属性。请注意,此代码仅检查文件名是否更改,而不是路径,因此如果这对您很重要,请相应地调整代码。

    此编辑也适用于SDK版本:3.2.0 GA。