2

一部のテキストが固定幅に収まる必要がある行数を計算したいと考えていますTextView。そして、私はこれに使用Paint.breakTextしました:

int maxWidth = WIDTH_IN_PIXELS;
int index = 0;
int linecnt = 0;
while (true) {
    float[] measuredWidth = new float[1];
    int advances = labelView.getPaint().breakText(text, index, text.length(), true,  maxWidth, measuredWidth);
    linecnt += 1;
    index += advances;
    if(index>=desc.length()) break;           
}

ただし、計算された値linecntは、実際に必要な値より常に 1 少なくなります。さらに調査した結果、API は単語内の任意のポイントでテキストを分割することがわかりましたが、TextView レイアウト テキストでは、単語が分割されることはありません。

// textBreak:
Hello Wo
rld
// Real layout:
Hello
World

ワードラップを尊重するようにbreakTextを取得するにはどうすればよいですか? または、これを正しく行う他の方法はありますか?

psループ内の単語の先頭にいつでも戻ることができることは知っていますが、それはハッキーに見え、すべての言語に当てはまるわけではありません。Android にはこれを行うエレガントな方法があると確信していますが、使用する API/フラグがわかりません。

pps TextView はダッシュ (-) を使用して長い単語を複数行に分割することがありますが、これに関するルールは不明です。

4

1 に答える 1