Blackberry - Как сделать перенос текста в ListField с флажками? - PullRequest
0 голосов
/ 28 ноября 2009

Я создаю ListField с флажками из Как - создать ListField с флажками
Но я не понимаю, как обернуть текст в строку в этом ListField.
Я сослался на тему Перенос текста для элементов в полях списка

Здесь написано

Если все, что вы отображаете, это текст, то я бы использовал подход, предложенный рабом.

Я отображаю текст только в ListField, который я хочу обернуть, если он не помещается на экране устройства.
Но я не получаю "подход, предложенный раб", в котором Как рассчитать?

String [] linesToDraw = рассчитать количество строк в зависимости от ширины строки

Я застрял в этом, поэтому какие-либо подробности по этому вопросу?


С твоей логикой я получил

* split text on words
* create string array and while words array not empty do
      o create string lineStr
      o while getFont().getAdvance(lineStr+" "+words[i]) < row width move words[i] to lineStr

Я делаю это как

if(getFont().getAdvance(lineStr+" "+words[i]) < Display.getWidth())
{
    lineStr += words[i];
}

И я храню lineStr в Vector linesToDraw, как и тот же lineStr, который я использую для хранения текста следующей строки.

и в конце для рисования я делаю

for (int i = 0; i < linesToDraw.size(); i++)
{ 
          String textToDraw = (String)linesToDraw.elementAt(i);
          graphics.drawText(textToDraw, 0, y, 0, w);
          y += fontHeight;
}

но как рассчитать нет. строк строки и высота строки?

так, чтобы с этой высотой строки я мог написать setRowHeight (rowHeight), поскольку высота строки различна для разных строк.


Я получил нет. строк в соответствии с шириной строки и сохранил их в векторе и я делаю

int fontHeight = this.getFont().getHeight();

     for (int i = 0; i < linesToDraw .size(); i++)
    {           
        textToDraw = (String)linesToDraw.elementAt(i);
        graphics.drawText(textToDraw, xpos, ypos, 0 , width);
        ypos += fontHeight;
    }

теперь он рисует линии, но поверх предыдущей, как по умолчанию listField.setRowHeight (), занимает только одну строку. Если есть 2 строки, то я пишу setRowHeight (getFont (). GetHeight () * 2) в drawListRow (), но затем он зацикливается

Если я напишу setRowHeight () при создании ListField, тогда все будет правильно, но для всех строк будет установлена ​​одинаковая высота строки.

Я получаю строку для рисования во время выполнения, и высота строки должна быть переменной для разных строк, тогда как я могу установитьRowHeight () с каким параметром и в каком методе?

1 Ответ

1 голос
/ 28 ноября 2009

Я думаю, что «рассчитать количество строк в зависимости от ширины строки» означает:

  • разделить текст на слова
  • создать массив строк, а в то время как массив слов не пустой
    • создать строку lineStr
    • while getFont (). GetAdvance (lineStr + "" + words [i]) <ширина строки перемещает слова [i] в ​​lineStr </li>

в итоге вы получите:

  • Строка [] строки со строками для строки
  • Высота строки = lines.lenght * (getFont (). GetHeight () + topMargin + bottomMargin)
...