Blackberry - 如何使用Checkbox在ListField中进行文本换行?

时间:2009-11-28 11:04:13

标签: user-interface blackberry custom-controls textwrapping listfield

我正在使用来自How To - Create a ListField with check boxes的复选框创建一个ListField 但是我没有得到如何在ListField中连续包装Text 我提到了这个帖子 Text Wrapping for text in List Field items

这里写的是

  

如果您要显示的只是文字,那么我会采用rab建议的方法。

我只在ListField中显示Text,如果它不适合设备屏幕,我想要换行 但我没有得到“由Rab建议的方法”,其中如何计算?

  

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;
}

但如何计算不。一排排的&amp;行高?

因此,使用此行高度,我可以编写setRowHeight(rowHeight),因为不同行的行高不同。


我得到了没有。根据行宽和正确的线条将它存储在Vector&amp;我在做

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行,那么我在drawListRow()中写setRowHeight(getFont()。getHeight()* 2)然后它进入循环

如果我在创建ListField时编写setRowHeight(),那么它会正确显示但是对于所有行都设置了相同的行高。

我在运行时获取要绘制的字符串&amp;对于不同的行,行高度应该是可变的,那么我如何使用什么参数&amp; setRowHeight()用哪种方法?

1 个答案:

答案 0 :(得分:1)

我认为“根据行宽计算行数”意味着:

  • 在文字上分割文字
  • 创建字符串数组,而单词数组不是空的
    • 创建字符串lineStr
    • 而getFont()。getAdvance(lineStr +“”+ words [i])&lt;行宽将单词[i]移动到lineStr

最终你会得到:

  • String []包含行
  • 的行
  • 行高= lines.lenght *(getFont()。getHeight()+ topMargin + bottomMargin)