如何替换视图

时间:2013-04-23 06:44:52

标签: titanium titanium-mobile

应用程序需要多个窗口(让我们调用A,B,C)。每个窗口都有多个视图(表视图,图像视图以及Web视图)。假设窗口A有三个视图(x,y,z),窗口B有三个视图(d,e,f)。应用程序需要在方向变化时显示不同大小的图像。

我已经使用手势事件监听器并通过窗口循环查看视图并用新图像替换视图。我遇到的问题是当我们从一个窗口导航到另一个窗口并且方向发生变化时,循环后加载视图会进行折腾。有没有更好的方法来实现同样的目标?

是否有类似下面代码的钛方法来替换视图?

var self=Ti.UI.currentWindow
var newView=Ti.UI.createImageView({image:'abc.png'})
self.replace(self.children[1],newView )

4 个答案:

答案 0 :(得分:1)

很遗憾,现在有replace方法。

您需要删除整个视图并重新添加它,但如果您在同一级别上有多个视图,则会导致错误的布局。然后,实现取决于设置的布局(verticalhorizontalcomposite等。

例如在vertical布局中删除一个项目并简单地添加一个项目将删除您指定的项目但在最后添加新项目,因为您无法指定应该添加它的顺序。

如果您有composite布局,则可以指定绝对位置,但添加新视图会导致此视图的zIndex更高,以便隐藏先前在相同/类似位置添加的视图

答案 1 :(得分:0)

为什么不简单地更改图片链接?

var self = Ti.UI.currentWindow;
self.children[1].image = 'bcd.png';

答案 2 :(得分:0)

Well you could always lock the orientation of your window。但这不是很好的做法(特别是对于iOS)。

如果您将视图的widthheight定义为百分比,或者Ti.UI.FILL,如果您有composite布局,则通常可以很好地处理方向更改。检查您是否没有给出视图绝对坐标,因为这可以cause layout problems.如果您有垂直或水平布局,通常不必担心方向更改,除非您没有正确地将视图嵌套在主容器中

答案 3 :(得分:0)

普拉萨德,

如果这只是为了确保图像在不同方向上看起来很好,您可以在android / images文件夹中使用Titanium提供的不同文件夹。您可以为每个方向和设备尺寸制作不同的图像。对于IOS,您可以像改变方向一样改变方向变化的图像。

https://wiki.appcelerator.org/display/guides/Using+density-specific+resources+on+Android

如果你对布局很感兴趣,你可以做几件事:

1.以百分比形式给出所有高度或宽度值。这样,一旦方向自动改变,所有元素都将重新调整大小。

2.在每个窗口打开时,默认检查方向是垂直还是水平,并相应地设置imageView的图像属性。

Ti.UI.orientation

默认情况下,此属性将为您提供窗口的方向。此属性的值可以是此

Ti.UI.PORTRAIT

Ti.UI.UPSIDE_PORTRAIT

Ti.UI.LANDSCAPE_LEFT

Ti.UI.LANDSCAPE_RIGHT

使用“if else”并相应地设置图像。