固定幅(たとえば100dp)のTextViewに収まるフォントサイズ10spの文字数を知る方法はありますか?
文字列全体が事前定義された幅のTextViewに収まる(表示される)かどうかを追跡する必要があります。
これを追跡または計算する方法を見つけることができませんでした。
Androidはプロポーショナルフォントを使用しているため、各文字は異なる幅を占めます。また、カーニングを考慮に入れると、文字列の幅が個々の文字の幅の合計よりも短くなる場合があります。
したがって、(a)文字列全体が制限内に収まるか、(b)文字列の幅が制限を超えるまで、一度に1文字ずつ追加して、文字列全体を測定するのが最も簡単です。
次のコードは、サイズ11pxの文字数がTextView100px幅に収まるかどうかを確認する方法を示しています。(Web上でpxとdpの間で変換する式を見つけることができます)。
の幅に収まらなくなるまでmeasureText(String text, int start, int end)
、の値をインクリメントするループで使用してこれを行います。end
TextView
String text = "This is my string";
int textViewWidth = 100;
int numChars;
Paint paint = textView.getPaint();
for (numChars = 1; numChars <= text.length; ++numChars) {
if (paint.measureText(text, 0, numChars) > textViewWidth) {
break;
}
}
Log.d("tag", "Number of characters that fit = " + (numChars - 1));
パフォーマンスが低い場合は、線形ループの代わりにバイナリ検索方法を使用してみてください。
これを判断する最善の方法は、テストすることです。DP を使用しているため、比較的デバイスに依存しません。固定幅フォントを使用していない限り、各文字の幅、カーニングなどを実際に試して測定し、TextView の幅と比較しない限り、理論的に決定する方法は実際にはありません。