在Titanium移动应用程序中获取标签的宽度

时间:2011-08-03 08:35:15

标签: iphone titanium titanium-mobile

如何在设置内容后获得标签的宽度?没有设置初始宽度。

我在表格行中有两个标签,如下所示:

label 1 (label 2)

此处未设置label 1的宽度。内容更改label 1的宽度有变化,有时会导致与label 2重叠。

现在,我的主要目标是动态设置label 2,使其不会与label 1过度关联。我想这样做:

  1. 首先计算label 1
  2. 的宽度
  3. 然后设置label 2 = width of label 1 + 10
  4. 的左侧

    如果有任何其他方式请帮助。

    这里有一些代码

    var win = Titanium.UI.createWindow({
        title: 'Cleos',
        backgroundImage: 'tablebg.png',
        navBarHidden: true,
    });
    var tableview = Titanium.UI.createTableView({
        backgroundColor: 'transparent',
        separatorStyle: Ti.UI.iPhone.TableViewSeparatorStyle.NONE,
        style: Titanium.UI.iPhone.TableViewStyle.PLAIN
    });
    win.add(tableview);
    var modelData = new Array;
    for (i = 0; i <= daga.length - 1; i++) { // `data` as json, comes from a source
        var row = Titanium.UI.createTableViewRow({
            height: 120.0,
            backgroundColor: 'transparent',
            selectedBackgroundColor: '#380710',
            hasDetail: true
        });
        var imageThumb = Titanium.UI.createImageView({
            image: '...',
            width: 100.0,
            height: 100.0,
            left: 4.0,
            top: 10.0
        });
        row.add(imageThumb);
        var name = Titanium.UI.createLabel({
            text: '...',
            font: {
                fontSize: 16,
                fontWeight: 'bold'
            },
            textAlign: 'left',
            color: '#fff',
            height: 30.0,
            top: 5.0,
            left: 110.0
        });
        row.add(modelname);
        var NumberOfImages = Titanium.UI.createLabel({
            text: '(' + 12 + ')',
            font: {
                fontSize: 16
            },
            width: 'auto',
            color: '#bfbebe',
            textAlign: 'left',
            height: 30.0,
            top: 5.0,
            left: '' // I want to set this `left  = width of label name`
        });
        row.add(NumberOfImages);
        modelData.push(row);
        tableview.setData(modelData);
    }
    win.open();
    

7 个答案:

答案 0 :(得分:6)

var width = label.toImage().width;

这将获得图像的实际宽度或高度(以像素为单位),并考虑字体属性(大小,族,重量)。

答案 1 :(得分:3)

var labelWidth = label.width;

但请注意“自动”值,因为它们通常会返回0.在将标签添加到视图后,应该请求该值。

<强> [更新] 如果NumberOfImages.left = name.width+name.left;不起作用,我会尝试计算宽度,如

var pixelPerChar = 8;
var pseudoWidth = name.text.length/pixelPerChar;
NumberOfImages.left = pseudoWidth + name.left;

答案 2 :(得分:1)

将宽度和高度都设置为自动,然后它应返回正确的值。

答案 3 :(得分:1)

auto尺寸的钛标签往往很烦人(或者我上次使用Titanium时);通常有效的解决方案是将它们放在宽度或高度为TiView的{​​{1}}内,然后从视图中读取相关属性。

答案 4 :(得分:1)

创建时,将name的宽度设置为“自动”。

name添加到行后,您可以按name.size.width

获取宽度

答案 5 :(得分:0)

将宽度设置为“自动”似乎剪辑为320(如果标签大于屏幕宽度,则标签不会保留一行)。有没有办法让标签大于屏幕,自动宽度超过屏幕edg

答案 6 :(得分:0)

我在启动时也有这种类型的问题。 你,轻松解决这个问题,你用%年龄(百分比)设置高度。 这意味着,当你定义 label.height = 10% label.left = 5%等 然后,它计算屏幕当前高度并默认设置为百分比。

在这个用途中我们也有利润。当我们改变方向而不是容易发生时,百分比。

谢谢