0

方法から チェックボックスを使用して ListField を作成しています - チェックボックスを使用して ListField を作成しますが
、その ListField の行にテキストをラップする方法がわかりません。
リストフィールドアイテムのテキストについては、スレッド テキストラッピングを参照しました

ここでは次のように書かれています

表示しているのがテキストだけの場合は、rab によって提案されたアプローチを使用します。

デバイス画面に収まらない場合にラップしたいListFieldにのみテキストを表示しています。
しかし、私はどのように計算する「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;
}

しかし、いいえを計算する方法。行と行の高さの行数?

行の高さは行ごとに異なるため、この行の高さで 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() が 1 行しか取得していないため、前の線を超えています。r 2 行がある場合、setRowHeight(getFont().getHeight()*2) を drawListRow() に記述しますが、ループに入ります

ListField の作成中に setRowHeight() を記述すると、正しく表示されますが、すべての行で同じ行の高さが設定されます。

実行時に描画する文字列を取得します & 行の高さは行ごとに可変である必要があります。

4

1 に答える 1

1

「行幅に応じて行数を計算する」とは、次のことを意味すると思います。

  • テキストを単語に分割する
  • 文字列配列を作成し、words 配列が空でない間 do
    • 文字列 lineStr を作成する
    • while getFont().getAdvance(lineStr+" "+words[i]) < 行幅 word[i] を lineStr に移動

最終的に次のようになります。

  • 行の行を含む文字列[]行
  • 行の高さ = lines.length * (getFont().getHeight() + topMargin + bottomMargin)
于 2009-11-28T12:01:22.210 に答える