0

应用程序需要多个窗口(让我们调用 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

4 回答 4

1

不幸的是,现在有replace方法。

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

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

如果你有一个composite布局,你可以指定绝对位置,但是添加一个新视图会导致zIndex这个视图更高,这样它就会隐藏以前在相同/相似位置添加的视图。

于 2013-04-23T07:05:30.150 回答
0

好吧,您总是可以锁定窗口的方向。但这并不是很好的做法(尤其是对于 iOS)。

width通常,如果您将视图的和定义height为百分比Ti.UI.FILL,或者如果您有composite布局,则可以很好地处理方向更改。检查您是否没有为视图提供绝对坐标,因为这可能会导致布局问题。如果您有垂直或水平布局,您通常不必担心方向变化,除非您没有正确地将视图嵌套在主容器中。

于 2013-04-23T14:28:24.997 回答
0

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

var self = Ti.UI.currentWindow;
self.children[1].image = 'bcd.png';
于 2013-04-23T12:41:04.937 回答
0

普拉萨德,

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

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

如果您担心布局,您可以做以下几件事:

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

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

Ti.UI.orientation

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

Ti.UI.肖像

Ti.UI.UPSIDE_PORTRAIT

Ti.UI.LANDSCAPE_LEFT

Ti.UI.LANDSCAPE_RIGHT

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

于 2013-04-23T15:30:15.553 回答