También me gustaría conseguir altura si es posible.
android
string
bounding-box
Mikael Lindlöf
fuente
fuente
textView.setTextSize()
.Si solo necesita el ancho, puede usar:
http://developer.android.com/reference/android/graphics/Paint.html#measureText(java.lang.String)
fuente
TextPaint paint = new TextPaint(); paint.setTextSize(textSize);
.textSize
está en píxeles.Hay dos medidas de ancho diferentes para un texto. Uno es el número de píxeles que se ha dibujado en el ancho, el otro es el número de 'píxeles' que debe avanzar el cursor después de dibujar el texto.
paint.measureText y paint.getTextWidths devuelven el número de píxeles (en flotante) que el cursor debe avanzar después de dibujar la cadena dada. Para la cantidad de píxeles pintados, use paint.getTextBounds como se menciona en otra respuesta. Creo que esto se llama el "avance" de la fuente.
Para algunas fuentes, estas dos medidas difieren (mucho), por ejemplo, la fuente Black Chancery tiene letras que se extienden más allá de las otras letras (superpuestas); consulte la 'L' mayúscula. Use paint.getTextBounds como se menciona en otra respuesta para pintar píxeles.
fuente
He medido el ancho de esta manera:
Esto te ayudaría.
fuente
Lo más probable es que desee conocer las dimensiones pintadas para una determinada cadena de texto con una fuente determinada (es decir, una
Typeface
familia de fuentes en particular como la "sans-serif" con un estilo BOLD_ITALIC y un tamaño particular en sp o px).En lugar de inflar un texto completo
TextView
, puede bajar de nivel y trabajar con unPaint
objeto directamente para texto de una sola línea , por ejemplo:Para texto de varias líneas o extendido (
SpannedString
), considere usar aStaticLayout
, en el que proporciona el ancho y deriva la altura. Para obtener una respuesta muy elaborada sobre cómo medir y dibujar texto en un lienzo en una vista personalizada haciendo eso, consulte: https://stackoverflow.com/a/41779935/954643También vale la pena señalar la respuesta de @arberg a continuación sobre los píxeles pintados frente al ancho de avance ("número de píxeles (en flotante) que el cursor debe avanzar después de dibujar la cadena dada"), en caso de que necesite lidiar con eso.
fuente
Me gustaría compartir una mejor manera (más versátil que la respuesta aceptada actual) de obtener el ancho exacto de un texto dibujado (
String
) con el uso de la clase estáticaStaticLayout
:este método es más preciso que
textView.getTextBounds()
, ya que puede calcular el ancho de una sola línea en una línea múltipleTextView
, o puede que no lo utiliceTextView
para empezar (por ejemplo, en unaView
implementación personalizada ).Esta forma es similar a
textPaint.measureText(text)
, sin embargo, parece ser más precisa en casos raros.fuente