1

内容を設定した後にラベルの幅を取得するにはどうすればよいですか? 初期幅は設定されていません。

次のようなテーブル行内に 2 つのラベルがあります。

label 1 (label 2)

ここでは、幅はlabel 1最初は設定されていません。コンテンツの幅の変更に伴い、コンテンツlabel 1の幅が変更され、 と重なる場合がありlabel 2ます。

今、私の主な目的は、label 2左を動的に設定して、それがオーバーラップしないようにすることlabel 1です。私は次のようにしたい:

  1. 最初に幅を計算しますlabel 1
  2. 次に、の左を設定しますlabel 2 = width of label 1 + 10

他の方法があれば助けてください。

ここにいくつかのコード

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();
4

7 に答える 7

6
var width = label.toImage().width;

これにより、画像の実際の幅または高さ (ピクセル単位) が取得され、フォントのプロパティ (サイズ、ファミリー、太さ) が考慮されます。

于 2012-12-09T11:31:44.070 に答える
3
var labelWidth = label.width;

ただし、「auto」値は0を返すことが多いため、注意してください。ビューにラベルを追加した後に値を要求する必要があります。

[更新]NumberOfImages.left = name.width+name.left;うまくいかない 場合は、次のように幅を計算しようとします

var pixelPerChar = 8;
var pseudoWidth = name.text.length/pixelPerChar;
NumberOfImages.left = pseudoWidth + name.left;
于 2011-08-03T08:40:21.130 に答える
1

幅と高さの両方を自動に設定すると、適切な値が返されます。

于 2011-08-03T08:42:30.707 に答える
1

作成時に幅nameを「自動」に設定します。

行に追加nameした後、次の方法で幅を取得できますname.size.width

于 2011-11-20T05:46:16.830 に答える
1

サイズの付いた Titanium ラベルはauto煩わしい傾向があります (または、前回 Titanium を使用したときはそうでした)。多くの場合、うまくいく解決策は、TiViewautoまたは高さのある の中にそれらを配置し、ビューから関連するプロパティを読み取ることです。

于 2011-08-06T06:44:34.240 に答える
0

開始時にもこのタイプの問題があります。あなたは、この問題を簡単に解決します。高さを %age (パーセンテージ) で設定します。つまり、label.height = 10% label.left = 5% などを定義すると、画面の現在の高さが計算され、デフォルトでパーセンテージで設定されます。

この使用では、利益もあります。向きを変えると、パーセンテージで簡単に変わります。

ありがとう

于 2012-02-08T12:32:15.983 に答える
0

幅を 'auto' に設定すると、320 にクリップされるようです (ラベルが画面の幅より大きい場合、ラベルは 1 行に収まりません)。自動幅で画面よりも大きなラベルを画面の端からはみ出す方法はありますか

于 2011-11-15T19:50:01.193 に答える