複数行のテキストTextView
で私が定義した境界に収まるようにフォントサイズを計算する方法は?
私は のTextView
中に を持っていRelativeLayout
ます。それに基づいて、実行時にアプリの画面サイズが認識されます。
Rect boundsTv = TextPositions.getTextViewBounds(1, mainActivity.mWidthPx, mainActivity.mHeightPx);
Log.e("SlideLoader", "paint.boundsTv() left, right, top, bottom :"+boundsTv.flattenToString());//paint.boundsTv() left, right, top, bottom :163 363 1767 749
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) tvText.getLayoutParams();
params.width = boundsTv.width();// right - left;
params.height = boundsTv.height();// bottom - top;
params.leftMargin = boundsTv.left; // Your X coordinate
params.topMargin = boundsTv.top; // Your Y coordinate
tvText.setLayoutParams(params);
tvText.invalidate();
そして、ここで問題が発生します。一部のデバイスでは、フォントが小さすぎて、TextView の半分未満しか表示されない場合があります。他のデバイスでは、大きすぎて半分にも収まりません。
出力コードは、フォントサイズがはるかに大きいデバイスからのものです。いくつかの方法を確認しましたが、おそらくこれら 2 つの方法が提案されますが、どちらも失敗します。
// left, top - right, bottom
TextPaint paint = tvText.getPaint();
paint.getTextBounds(text, 0, text.length()-1, boundsTv);
Log.e("SlideLoader", "paint.getTextBounds() left, right, top, bottom :"+boundsTv.flattenToString());//paint.getTextBounds() left, right, top, bottom :2 -33 16049 9, how to interpret this values?!
float width = paint.measureText(text);// for single line