¿Puedo saber cuántos caracteres pueden caber en TextView de X anchura dp?

¿Hay una manera de saber cuántos caracteres del tamaño de fuente 10sp pueden caber en un TextView de una anchura fija (digamos 100dp)?

Necesito seguir si la secuencia entera cabe (sea visible) en un TextView del ancho predefinido.

No he podido encontrar una manera de rastrear o calcular esto.

Dado que Android utiliza fuentes proporcionales , cada carácter ocupa un ancho diferente. Además, si se tiene en cuenta el kerning , el ancho de una cadena puede ser más corto que la suma de los anchos de los caracteres individuales.

Por lo tanto, es más fácil medir la cadena completa añadiendo un carácter a la vez hasta que (a) toda la cadena se encuentre dentro del límite, o (b) el ancho de la cadena exceda el límite.

El siguiente código muestra cómo encontrar cuántos caracteres de tamaño 11px cabe en TextView 100px de ancho. (Puede encontrar fórmulas para convertir entre px y dp en la Web).

Lo haremos usando measureText(String text, int start, int end) en un bucle incrementando el valor de end hasta que ya no se ajuste al ancho de TextView .

 String text = "This is my string"; int textViewWidth = 100; int numChars; Paint paint = textView.getPaint(); for (numChars = 1; numChars <= text.length; ++numChars) { if (paint.measureText(text, 0, numChars) > textViewWidth) { break; } } Log.d("tag", "Number of characters that fit = " + (numChars - 1)); 

Si el rendimiento es bajo, puede intentar usar un método de búsqueda binaria en lugar de un bucle lineal.

La mejor manera de determinar esto sería probarlo. Dado que está utilizando DP, será relativamente independiente del dispositivo. A menos que esté usando una fuente de anchura fija, no hay realmente una manera de determinarla teóricamente a menos que realmente desee probar y medir el ancho de cada letra, el kerning, etc. y comparar con el ancho del TextView

  • No puede desplazar el ViewPager al tocar TextView (con android: gravity = "center") en él
  • El texto de la vista de texto se desliza hacia abajo en Android 3.0
  • Cree programaticamente TextView con elipsis
  • Multilínea TextView
  • Ocultar TextView después de algún tiempo en Android
  • Obtener texto seleccionado de TextView
  • TextView: lineSpacingMultiplier y lineSpacingExtra también se aplica a la última línea
  • ¿Cómo actualizar un TextView en una actividad de un servicio en Android?
  • Ellipsize no funciona para textView dentro de listView personalizado
  • Single TextView con texto coloreado múltiple
  • Establecer ancho a wrap_content para TextView a través de código
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.