Існують різні способи вимірювання висоти залежно від того, що вам потрібно.
Якщо ви робите щось на кшталт точно центрування невеликої кількості фіксованого тексту, ви, мабуть, хочете getTextBounds. Ви можете отримати обмежуючий прямокутник таким
Rect bounds = new Rect();
mTextPaint.getTextBounds(mText, 0, mText.length(), bounds);
int height = bounds.height();
Як видно з наступних зображень, різні рядки даватимуть різну висоту (показані червоним кольором).

Ці різні висоти можуть бути недоліком у деяких ситуаціях, коли вам просто потрібна постійна висота, незалежно від тексту. Дивіться наступний розділ.
Ви можете обчислити висоту шрифту з метрики шрифту. Висота завжди однакова, оскільки її отримують із шрифту, а не будь-якого конкретного текстового рядка.
Paint.FontMetrics fm = mTextPaint.getFontMetrics();
float height = fm.descent - fm.ascent;
Основна лінія - це рядок, на якому сидить текст. Спуск, як правило, найдальший персонаж піде нижче лінії, а сходження, як правило, найдаліший персонаж піде вище лінії. Для отримання висоти вам потрібно відняти підйом, оскільки це від'ємне значення. (Базовий рівень є y=0і ydescreases до екрану.)
Подивіться на наступне зображення. Висоти для обох струн є 234.375.

Якщо вам потрібна висота рядка, а не лише висота тексту, ви можете зробити наступне:
float height = fm.bottom - fm.top + fm.leading; // 265.4297
Це bottomта topлінія. Провідний (міжрядковий інтервал) зазвичай дорівнює нулю, але все одно слід додати його.
Зображення, наведені вище, походять із цього проекту . Ви можете пограти з ним, щоб побачити, як працюють метрики шрифтів.
Для вимірювання висоти багаторядкового тексту слід використовувати a StaticLayout. Я детально розповів про це у цій відповіді , але основний спосіб досягти такої висоти такий:
String text = "This is some text. This is some text. This is some text. This is some text. This is some text. This is some text.";
TextPaint myTextPaint = new TextPaint();
myTextPaint.setAntiAlias(true);
myTextPaint.setTextSize(16 * getResources().getDisplayMetrics().density);
myTextPaint.setColor(0xFF000000);
int width = 200;
Layout.Alignment alignment = Layout.Alignment.ALIGN_NORMAL;
float spacingMultiplier = 1;
float spacingAddition = 0;
boolean includePadding = false;
StaticLayout myStaticLayout = new StaticLayout(text, myTextPaint, width, alignment, spacingMultiplier, spacingAddition, includePadding);
float height = myStaticLayout.getHeight();