我正在使用经典项目Appcelerator Titanium Studio。 在一个窗口中,有一个tableview由tableviewRow逐个创建。其中一行仅包含一个ImageView,它具有超链接作为图像源。 由于图像的大小未知,我已经修正了它的宽度:
ImageView.width=200;
ImageView.height=Ti.UI.SIZE;
它适用于iOS,但不适用于Android。 在窗口打开(纵向)时,图像缩小到较小的尺寸,绝对不是200.但是如果将设备的方向更改为横向,则其宽度恢复为200,并且行高度自动扩展。然后它保持正确的图像宽度和行高甚至变回肖像。
以下是完整的代码段:
var win = Ti.UI.createWindow({});
var data = [];
var imageView = Ti.UI.createImageView({
image:'http://images.bergdorfgoodman.com/ca/3/product_assets/T/B/F/Y/U/BGTBFYU_mk.jpg',
width:200,
height: Ti.UI.SIZE
});
var imageRow = Ti.UI.createTableViewRow({
height:Ti.UI.SIZE
});
imageRow.add(imageView);
data.push(imageRow);
var tableview = Ti.UI.createTableView({data:data});
win.add(tableview);
我该如何解决这个问题?
答案 0 :(得分:0)
为什么不对ImageView使用scaleType属性,如下所示:
<ImageView
android:id="@+id/myImg"
android:layout_width="300dp"
android:layout_height="400dp"
android:scaleType="fitXY"/>
它会将ImageView的宽度和高度分别固定为300和400.
以编程方式:
ImageView view = new ImageView (this);
view.setScaleType(ScaleType.FIT_XY);
答案 1 :(得分:0)
我会尝试在图片上设置postlayout
事件(http://docs.appcelerator.com/platform/latest/#!/api/Titanium.UI.ImageView-event-postlayout),并将行高(图片的父级)设置为您在事件参数中获得的内容。
另一种选择是使用load
(http://docs.appcelerator.com/platform/latest/#!/api/Titanium.UI.ImageView-event-load)的ImageView
事件,并将行高设置为图像的当前大小。
答案 2 :(得分:0)
我对此的看法如下:
行视图(合金):
<Alloy>
<View id='row'>
<Label id='title'/>
<TextArea id='description'/>
</View>
</Alloy>
行样式(合金):
"#row"{
height:Ti.UI.SIZE,
layout:'vertical'
}
"Label":{
height:Ti.UI.SIZE
}
"TextField":{
height:Ti.UI.SIZE,
editable:false
}
"TextArea":{
height:Ti.UI.SIZE,
editable:false
}
在行控制器(Alloy)文件中,我设置了值和文本属性,例如:
$.title.text = args.title;
$.description.value = args.value;
然后,在行控制器(Alloy)的末尾,我有这个:
$.row.height = $.row.toImage().height;
在你的情况下:
imageView.height = imageRow.height = imageView.toImage().height;
答案 3 :(得分:0)
除了解决方法之外,您发现在不应该需要的平台上找到的工作方式不同。请在Appcelerator JIRA检查这是否是已知问题。如果不是,请创建一个票证,链接到此问题,同时在票证本身中提供可重现的代码,步骤和环境信息。不要忘记在这里删除一张票的链接,以便其他人可以随身携带。