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

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

6 голосов
/ 06 февраля 2011

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

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

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

Ответы [ 2 ]

13 голосов
/ 06 февраля 2011

Поскольку этот размер известен только после завершения макета, одним из способов является создание пользовательского текстового представления и использование метода 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);
        } 
    }); 

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

6 голосов
/ 06 февраля 2011

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

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

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

    Прямоугольные границы; paint.getTextBounds (text, 0, text.length (), bounds);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...