Eu gostaria de obter altura também, se possível.
android
string
bounding-box
Mikael Lindlöf
fonte
fonte
textView.setTextSize()
.Se você só precisa da largura, pode usar:
http://developer.android.com/reference/android/graphics/Paint.html#measureText(java.lang.String)
fonte
TextPaint paint = new TextPaint(); paint.setTextSize(textSize);
.textSize
está em pixels.Existem duas medidas de largura diferentes para um texto. Um é o número de pixels que foi desenhado na largura, o outro é o número de 'pixels' que o cursor deve avançar após desenhar o texto.
paint.measureText e paint.getTextWidths retorna o número de pixels (em float) que o cursor deve avançar após desenhar a string dada. Para o número de pixels pintados, use paint.getTextBounds conforme mencionado em outra resposta. Eu acredito que isso é chamado de 'Avanço' da fonte.
Para algumas fontes, essas duas medidas diferem (muito), por exemplo, a fonte Black Chancery tem letras que se estendem além das outras letras (sobrepostas) - veja o 'L' maiúsculo. Use paint.getTextBounds conforme mencionado em outra resposta para obter os pixels pintados.
fonte
Eu medi a largura desta forma:
Isso ajudaria você.
fonte
Muito provavelmente você deseja saber as dimensões pintadas para uma determinada sequência de texto com uma determinada fonte (ou seja, uma
Typeface
família de fontes “sans-serif” com um estilo BOLD_ITALIC e tamanho específico em sp ou px).Em vez de inflar totalmente
TextView
, você pode ir para um nível mais baixo e trabalhar com umPaint
objeto diretamente para texto de uma linha , por exemplo:Para texto multi-linhas ou estendido (
SpannedString
), considere usar umStaticLayout
, em que você fornece a largura e obtém a altura. Para obter uma resposta muito elaborada sobre como medir e desenhar texto em uma tela em uma visualização personalizada fazendo isso, consulte: https://stackoverflow.com/a/41779935/954643Também vale a pena notar a resposta de @arberg abaixo sobre os pixels pintados vs a largura de avanço ("número de pixels (em float) que o cursor deve ser avançado após desenhar a string dada"), caso você precise lidar com isso.
fonte
Eu gostaria de compartilhar uma maneira melhor (mais versátil do que a resposta aceita atualmente) de obter a largura exata de um texto desenhado (
String
) com o uso de classe estáticaStaticLayout
:este método é mais preciso do que
textView.getTextBounds()
, uma vez que você pode calcular a largura de uma única linha em uma multilinhaTextView
, ou você pode não usarTextView
para começar (por exemplo, em umaView
implementação personalizada ).Esta forma é semelhante
textPaint.measureText(text)
, porém parece ser mais precisa em casos raros.fonte