Android中可变高度的TableViewRow

时间:2016-02-02 10:17:12

标签: android titanium tableview appcelerator

我正在使用经典项目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);

我该如何解决这个问题?

4 个答案:

答案 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),并将行高(图片的父级)设置为您在事件参数中获得的内容。

另一种选择是使用loadhttp://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检查这是否是已知问题。如果不是,请创建一个票证,链接到此问题,同时在票证本身中提供可重现的代码,步骤和环境信息。不要忘记在这里删除一张票的链接,以便其他人可以随身携带。