Получить высоту TextView

У меня есть текст, который будет помещен в TextView . Я сделал это с помощью setText() .

Теперь мне нужно найти количество строк или высоты, которые текст занимает в TextView . Я попытался использовать getHeight() , но всегда возвращает 0.

В любом случае, чтобы получить высоту текста, присутствующего в TextView ?

Solutions Collecting From Web of "Получить высоту TextView"

Как указал Джон, вы не сможете получить высоту сразу после setText. Я не уверен, что использование getHeight () в TextView само по себе поможет вам. Высота представления зависит не только от высоты видимого текста в представлении, но и от вида / макета, в котором находится TextView. Если группа просмотра сообщает TextView о максимизации высоты, getHeight () не даст вам никуда даже Если вы ждете, пока текст не будет рендерен.

Я вижу несколько способов, которыми это можно было бы сделать:

  1. Подкласс TextView и перезаписать метод onSizeChanged. Там, вызовы supers onSizeChanged, а затем получить количество строк в TextView по getLineCount () и высота в строке с getLineHeight (). Это может быть или не быть лучше, чем использование getHeight (), в зависимости от вашего макета или чего-то еще.
  2. Не используйте размеры Textviews. Получите Paint TextViews с помощью TextView.getPaint (), а затем вычислите ширину и высоту

    Прямые границы; Paint.getTextBounds (текст, 0, text.length (), границы);

Теперь вы будете иметь размеры в границах. Теперь вы можете работать с paint.breakText, чтобы узнать, сколько текста вы поместите на одной строке. Вероятно, слишком много хлопот и не гарантировано (для моего неподготовленного глаза), чтобы быть той же логикой, что и TextView.

Поскольку этот размер известен только после завершения макета, одним из способов является создание пользовательского текстового представления и использование метода onSizeChanged. Другой способ:

  final TextView tv = (TextView) findViewById(R.id.myTextView); ViewTreeObserver vto = tv.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Toast.makeText(MyActivity.this, tv.getWidth() + " x " + tv.getHeight(), Toast.LENGTH_LONG).show(); tv.getViewTreeObserver().removeGlobalOnLayoutListener(this); } }); 

Этот код, который я нашел здесь: Как получить размеры представления?