Титан: проблема с наложением этикетки

Для Android

У меня есть две метки в строке таблицы. Я пытаюсь установить эти две метки по вертикали, но firstLabel перекрывает вторую. Поскольку высота firstLabel "auto" и она содержит динамический текст, например. 10 строк, 20 строк.

Из-за динамической высоты firstLabel я не мог установить верхнюю часть secondLabel, чтобы она перекрывалась.

Я перепробовал все возможные решения, доступные в SO и Appcelerator, но не смог найти исправление.

1). Я не мог получить высоту firstLabel после или до добавления ее в представление, строку таблицы и т.д....

2) Пытался установить высоту метки судя по длине текста, но исправить не удалось.

Все еще ищу решение..

введите здесь описание изображения


person Maulik    schedule 16.03.2012    source источник


Ответы (2)


Что вам нужно сделать, так это установить вертикальный макет не на метке, а на представлении, содержащем все метки. Если родительский вид имеет вертикальный макет, он поместит вторую метку сразу после окончания первой метки. Кроме того, установка свойства «top» второй метки поместит такое же количество единиц между нижней частью метки1 и верхней частью метки 2. Подумайте об относительном расположении блочных элементов в CSS.

person DannyM    schedule 16.03.2012
comment
Чтобы добавить к проблеме, с которой вы столкнулись при получении динамического представления, все устройства имеют разные разрешения и плотности, поэтому приложение не знает, какой будет высота, пока она не отобразится на экране. Таким образом, вы можете получить значение высоты после добавления метки в окно и открытия окна. - person DannyM; 16.03.2012
comment
Вы знаете, чувак .. Я пытался решить это последние 2 дня! Я ничего не знал о структуре макета Android и вообще .... Очень ценю вашу помощь ... Большое спасибо, это работает ... - person Maulik; 17.03.2012
comment
еще одна вещь ... какая модификация мне нужна, чтобы установить горизонтальный вид изображения, что означает левую сторону, где доступно пустое пространство? - person Maulik; 17.03.2012
comment
Я думаю, что при просмотре изображения изображение растягивается до размера представления, но я не уверен на 100%. - person DannyM; 19.03.2012
comment
На самом деле, если я поставлю изображение, то моя первая метка будет помещена после изображения. Скажем, высота изображения равна 50, тогда первая метка автоматически начнется с 52... - person Maulik; 19.03.2012
comment
Это только в том случае, если строка расположена вертикально. - person DannyM; 19.03.2012
comment
Что вы хотите сделать, так это установить строку в горизонтальное положение. Это будет та же концепция. Имейте в виду, что вы можете поместить представления внутри представлений, поэтому вы можете установить горизонтальную строку и иметь представление изображения, а также обычное представление (которое содержит метки) и установить нормальное представление вертикальным. - person DannyM; 19.03.2012
comment
для быстрого решения .. Я установил верхнюю часть моей первой метки на «-50dp», чтобы она располагалась рядом с изображением с левым отступом «65dp» … - person Maulik; 19.03.2012
comment
да, правда.. но я пробовал с представлением и добавлял свои метки в представление и устанавливал макет вертикально для представления, а макет строки - горизонтальным... но это не сработало... см. это developer.appcelerator.com/question/133951/ - person Maulik; 19.03.2012
comment
Что бы я сделал, так это: 1) создать tableViewRow с горизонтальной позицией. 2) добавьте imageView и view1 в tableviewRow. 3) установите положение view1 на вертикаль и значение left на 10 4) добавьте метки в view1 с textAlign, установленным на «left». Это создаст изображение, которое будет находиться на одном уровне с левой стороной tableViewRow. Затем он примет динамическую ширину изображения и добавит левое поле в 10 пикселей к представлению1. Затем он добавит выровненные по левому краю метки в view1. - person DannyM; 19.03.2012
comment
привет, можете ли вы обратиться к этому stackoverflow.com/questions/9802302/ - person Maulik; 21.03.2012

Решено... Согласно ответу DannyM. Я также заметил, что порядок добавления меток в строку также имеет значение.

for (var i = 0; i < results.length; i++)
{
    // Create a row and set its height to auto
    row = Titanium.UI.createTableViewRow
    ({
        height:'auto',
        layout :'vertical'
    });

    var currentObj = results[i];
    // Create the label to hold the place name
    var placeNameLabel = Titanium.UI.createLabel
    ({
        text:currentObj.PlaceName,
        left:'75dp',
        top:'auto',
        width:'auto',
        height:'18dp',              
        textAlign:'left',
        font:{fontSize:'14dp',fontWeight:'bold'},
        wordWrap:true
    });

    var placeAddressLabel = Titanium.UI.createLabel
    ({
        text:currentObj.PlaceAddress,
        left:'75dp',
        top:'auto',
        width:'230dp',
        height:'auto',      
        textAlign:'left',
        font:{fontSize:'14dp'}                  
    });

    var checkInDate = Titanium.UI.createLabel
    ({
        text:currentObj.CheckInDate+' '+currentObj.CheckInTime,
        left:'75dp',
        top:'auto', //placeAddressLabel.height + 30 +'dp',
        width:'165dp',
        height:'25dp',
        textAlign:'left',
        font:{fontSize:'14dp'},
        wordWrap:true,
    });

    row.add(placeNameLabel);
    row.add(placeAddressLabel);
    row.add(checkInDate)

    tableData[i] = row;
 }
 return tableData ;
person Maulik    schedule 17.03.2012