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:
- se llama onmeasure y no sé por qué - android
- Android interceptar la pasta \ copy \ cut en editText
- Cómo agregar el botón de texto a la barra de acción
- Centrar una vista de texto vertical en un EditText
- Uso de estilos de fuente predeterminados 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.
- Puedo definir el texto de alineación intermedia en un archivo xml de diseño de Android
- Listas ordenadas dentro de un Android TextView
- ¿Cómo encontrar el número de caracteres de TextView de Android por línea?
- Cómo cambiar el color de texto de un Android ToogleButton en el cambio de estado?
- Cómo configurar el idioma holandés en texto a voz?
- Representación inconsistente de SVG entre escritorio y móvil - ¿es Arial una fuente segura en SVG?
- Android Cambiar elementos de menú del cajón de navegación Texto por programación
- Presentar contenido html como "páginas dinámicas"
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?