Скорее всего, вы хотите знать нарисованные размеры для заданной строки текста с заданным шрифтом (то есть для конкретного Typeface
, такого как семейство шрифтов «sans-serif» со стилем BOLD_ITALIC,и определенного размера в sp или px).
Вместо того, чтобы надувать полноценный TextView
, вы можете перейти на более низкий уровень и работать с объектом Paint
напрямую для однострочный текст, например:
// Maybe you want to construct a (possibly static) member for repeated computations
Paint paint = new Paint();
// You can load a font family from an asset, and then pick a specific style:
//Typeface plain = Typeface.createFromAsset(assetManager, pathToFont);
//Typeface bold = Typeface.create(plain, Typeface.DEFAULT_BOLD);
// Or just reference a system font:
paint.setTypeface(Typeface.create("sans-serif",Typeface.BOLD));
// Don't forget to specify your target font size. You can load from a resource:
//float scaledSizeInPixels = context.getResources().getDimensionPixelSize(R.dimen.mediumFontSize);
// Or just compute it fully in code:
int spSize = 18;
float scaledSizeInPixels = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_SP,
spSize,
context.getResources().getDisplayMetrics());
paint.setTextSize(scaledSizeInPixels);
// Now compute!
Rect bounds = new Rect();
String myString = "Some string to measure";
paint.getTextBounds(myString, 0, myString.length(), bounds);
Log.d(TAG, "width: " + bounds.width() + " height: " + bounds.height());
Для многострочного или составного текста (SpannedString
) рассмотрите возможность использования StaticLayout
, в котором вы предоставляетеширина и вывести высоту.Для очень сложного ответа об измерении и рисовании текста на холсте в пользовательском представлении, сделав это, см .: https://stackoverflow.com/a/41779935/954643
Также стоит отметить ответ @ arberg ниже о пикселях, окрашенных по сравнению с шириной продвижения (msgstr "количество пикселей (в формате с плавающей запятой), на которое должен перемещаться курсор после прорисовки заданной строки"), если вам нужно с этим справиться.