Obter a altura de um TextView

votos
6

Eu tenho algum texto que será colocado em um TextView. Eu fiz isso usando setText().

Agora eu preciso encontrar o número de linhas ou altura do texto ocupa no TextView. Eu tentei usar getHeight(), mas ele sempre retorna 0.

Existe uma maneira de obter a altura do texto presente no TextView?

Publicado 06/02/2011 em 11:17
fonte usuário
Em outras línguas...                            


2 respostas

votos
13

Porque este tamanho é conhecido somente após o layout está terminado, é uma maneira de criar uma exibição de texto personalizado e usar o método onSizeChanged. Outra maneira é esta:

    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);
        } 
    }); 

Este código que eu encontrei aqui: Como recuperar as dimensões de um ponto de vista?

Respondeu 06/02/2011 em 15:03
fonte usuário

votos
6

Como John apontou, você não será capaz de obter a altura imediatamente após setText. Eu não tenho certeza usando getHeight () no próprio TextView irá ajudá-lo muito. A altura do ponto de vista não só é dependente da altura do texto visível na vista, mas também sobre o ViewGroup / layout do TextView reside. Se o ViewGroup conta a TextView para maximizar altura, getHeight () levarão a lugar nenhum mesmo se você esperar até depois do texto é processado.

Eu vejo uma série de maneiras que isso poderia ser feito:

  1. TextView subclasse e substituir o método onSizeChanged. Em lá, chamar supers onSizeChanged, em seguida, obter o número de linhas dentro do TextView por getLineCount () e a altura por linha com getLineHeight (). Isso pode ou não pode ser melhor do que usar getHeight (), dependendo do layout ou outros enfeites.
  2. Não use as dimensões TextViews. Obter os TextViews pintura com TextView.getPaint (), e, em seguida, calcular a largura e altura de

    limites rect; paint.getTextBounds (texto, 0, text.length (), limites);

Você agora tem as dimensões de limites. Agora você pode trabalhar com paint.breakText para ver quanto texto você vai caber em uma linha. Provavelmente muito trabalho e não garantida (a meu olho destreinado) para ser a mesma lógica usada por TextView.

Respondeu 06/02/2011 em 15:03
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more