Nuevo carácter de línea \ n no se muestra correctamente en textView Android
Sé que si haces algo como
myTextView.setText("This is on first line \n This is on second line");
Entonces se mostrará correctamente como este:
- EditText Alternativas en un Widget? Tiene que haber una forma
- Cómo deshabilitar Word-wrap en Multiline Android TextView?
- Ajuste automático de TextView para Android
- ¿Cómo utilizar EditTextPreference como un campo de texto de contraseña enmascarado?
- Cómo capturar una excepción (ActivityNotFoundException) durante el uso de LinkMovementMethod
Esta es la primera línea
Esta es la segunda línea
Cuando almaceno esa cadena en una base de datos y luego la pongo a la vista que aparece como tal:
Esto está en la primera línea \ n Esto está en la segunda línea
Esta es la línea de código que utilizo para extraer la cadena de la base de datos:
factView.setText(factsCursor.getString(MyDBAdapter.FACT_COLUMN));
Simplemente relleno la base de datos de un archivo de texto donde cada línea es una nueva entrada en la tabla así que una línea parecería esto "Esto está en la primera línea \ n Esto está en la segunda línea" y se almacena como texto.
¿Hay alguna razón por la que no se muestran correctamente los \ n caracteres? Debe ser algo que ver con la cadena que está en la base de datos. ¿Alguna sugerencia?
- Animación del tamaño de texto de TextView
- Establecer el relleno de texto real en TextView con elementos compuestos
- No se puede inflar correctamente el diseño de un fragmento en la aplicación de Android
- Mostrar todos los caracteres Unicode en TextView
- Android define el color de fondo en TextView en styles.xml
- Desplazamiento por programación de una palabra en vista en una vista de texto
- Altura dinámica de TextView dentro de un GridLayout
- Cómo hacer un TextView en negrita?
Como Falmarri dijo en su comentario, su cadena se está escapando cuando se pone en la base de datos. Usted podría intentar y unescape la cadena llamando a la String s = unescape(stringFromDatabase)
antes de colocarlo en su TextView
.
Como advertencia, asegúrese de que está utilizando DatabaseUtils.sqlEscapeString()
en cualquier tipo de datos que provengan del usuario o de una fuente cambiable desconocida al insertar datos en la base de datos. Esto le protegerá de errores e Inyección de SQL .
He encontrado esta pregunta Austyn Mahoney respuesta es correcta, pero aquí hay un poco de ayuda:
private String unescape(String description) { return description.replaceAll("\\\\n", "\\\n"); }
description
es la cadena que sale de su base de datos de SQLite
Intente \\n
lugar de \n
. Si lanza una excepción que usar una palabra clave newline en lugar de \ n … newline es un carácter, ascii 10; a menudo se introduce en una cadena literal … y servirá a su propósito …. 🙂
"This is on first line"||x'0A'||"This is on second line"
El ||
concatena cadenas y el x'0A'
es una nueva línea sin escape.
Si está insertando registros, tendrá que reemplazar cada nueva línea por "||x'0A'||"
(Si la cadena es doble). Esto puede parecer torpe comparado con el otro asnswers. Sin embargo, si sus líneas están en columnas separadas esto también funciona en un select:
SELECT firstline||x'0A'||secondline FROM wherever;
Encontré esto mientras tenía el mismo problema que usted: http://www.mail-archive.com/[email protected]/msg43557.html
Un área de texto puede estar en modo de línea múltiple o de línea única. Cuando está en modo de línea única, los caracteres de nueva línea '\ n' serán tratados como espacios. En caso de duda, para activar el modo multi-línea, puede utilizar el código siguiente:
setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
Tuve el problema de que el mismo código no funcionaba en nido de abeja y en froyo, que parecen tener diferentes valores por defecto. Ahora también excluyo la bandera cuando quiero forzar un campo para ser solo alineado.
Desde el documento de Android:
public static final int TYPE_TEXT_FLAG_MULTI_LINE Se agrega en el nivel 3 de API
Marca para TYPE_CLASS_TEXT: se pueden introducir varias líneas de texto en el campo. Si este indicador no está establecido, el campo de texto se restringirá a una sola línea. Valor constante: 131072 (0x00020000)
http://developer.android.com/reference/android/text/InputType.html#TYPE_TEXT_FLAG_MULTI_LINE
Debe establecer el indicador antes de rellenar el campo.
- Congelar o crear una vista Web estable al seleccionar la barra de acción Volver? Impedir Cargar / recargar cada vez
- ¿Cómo salir del navegador de aplicaciones de Twitter en Android?