Cómo evitar que EditText rompa una línea después de la puntuación
Por defecto, un Android EditText romperá una línea si la línea es más larga que la vista, como esto:
Thisisalineanditisveryverylongs (end of view) othisisanotherline
O si la línea contiene un carácter de puntuación, como este:
- ¿Cómo dibujar texto en cursiva en el lienzo de Android?
- Texto en negrita o en cursiva en Toast sin creación Ver?
- Android, texto / fuente se procesa como cuadrados
- Desplazamiento horizontal del texto en Android
- Envuelva texto fuera de la curva de bezier en android
Thisisalineanditsnotsolong; (several characters from the end of view) butthisisanotherline
Como requisito de mi trabajo, el texto tiene que romper una línea sólo si la línea es más larga que la vista, como esto:
Thisisalineanditsnotsolong;andt (end of view) hisisanotherline
Debe haber una manera de lograr esto, ¿verdad? Hasta ahora no he encontrado de todos modos para hacer esto.
- ¿Existen bibliotecas de análisis de PDF gratuitas que funcionen en Android?
- Obtener palabra de EditText en la posición actual del cursor
- Dimensionar un TextView de múltiples líneas de Android
- ¿Cómo puedo añadir una nueva línea en formato html en android?
- Cómo centrar un texto de dos líneas en un TextView en Android?
- Android EditText vista Sugerencia flotante en el diseño del material
- Texto de Android TextView Justify
- Android EditText setText no actualizar el texto
La forma en que TextView (y EditText) rompe el texto es a través de llamadas de función privadas a BoringLayout internamente. Por lo tanto, la mejor manera sería sublcass EditText y reescribir estas funciones. Pero no será una tarea trivial.
Por lo tanto, en la clase TextView hay creaciones de diferentes clases para el estilo de texto. El que buscamos es DynamicLayout. En esta clase llegamos a una referencia de la clase StaticLayout (en una variable llamada reflujo). En el constructor de esta clase se encuentra el algoritmo de ajuste de texto:
/* * From the Unicode Line Breaking Algorithm: * (at least approximately) * * .,:; are class IS: breakpoints * except when adjacent to digits * / is class SY: a breakpoint * except when followed by a digit. * - is class HY: a breakpoint * except when followed by a digit. * * Ideographs are class ID: breakpoints when adjacent, * except for NS (non-starters), which can be broken * after but not before. */ if (c == ' ' || c == '\t' || ((c == '.' || c == ',' || c == ':' || c == ';') && (j - 1 < here || !Character.isDigit(chs[j - 1 - start])) && (j + 1 >= next || !Character.isDigit(chs[j + 1 - start]))) || ((c == '/' || c == '-') && (j + 1 >= next || !Character.isDigit(chs[j + 1 - start]))) || (c >= FIRST_CJK && isIdeographic(c, true) && j + 1 < next && isIdeographic(chs[j + 1 - start], false))) { okwidth = w; ok = j + 1;
Aquí es donde va todo el envoltorio. Así que necesitará subclases para cuidar de StaticLayout, DynamicLayout, TextView y finalmente EditText que – estoy seguro – será una pesadilla 🙁 No estoy seguro de cómo va todo el flujo Si quieres – eche un vistazo a TextView primero Y compruebe las llamadas de getLinesCount – este será el punto de partida.
Este algoritmo de Line Breaking en Android realmente apesta, ni siquiera es lógicamente correcto – una coma no puede ser el último carácter de una línea. Sólo produce saltos de línea innecesarios, lo que resulta en un diseño de texto extremadamente extraño.
Hola Aquí hay un método que primero consigo de otro chico y luego hacer un poco de cambios, realmente funciona para mí usted puede tener un intento.
//half ASCII transfer to full ASCII public static String ToSBC(String input) { char[] c = input.toCharArray(); for (int i = 0; i< c.length; i++) { if (c[i] == 32) { c[i] = (char) 12288; continue; } if (c[i]<=47 && c[i]>32 ) c[i] = (char) (c[i] + 65248); } return new String(c); } }
aquí está. Cambio algunos caracteres especiales de la mitad de la esquina a la esquina completa, como "," ".", Y el efecto es bastante bueno. Puedes intentarlo.
- Valor de dimensión definido de Android XML que produce resultados inesperados
- Escoger una imagen de la galería en el estudio androide?