No sé cómo hacer que un texto específico en TextView se convierta en NEGRITA.
Es como esto
txtResult.setText(id+" "+name);
Quiero que la salida sea así:
1111 neil
id
y name
son variables en las que he recuperado el valor de la base de datos, y quiero ponerlo id
en negrita, pero solo id
para name
que no se vea afectado, no tengo idea de cómo hacerlo.
android
textview
android-textattributes
Budi Darmawan
fuente
fuente
Respuestas:
Simplemente construya su Cadena en HTML y configúrelo:
fuente
Html.fromHtml()
ahora está en desusoSi bien puede usar Html.fromHtml () , puede usar un enfoque más nativo que es SpannableStringBuilder , esta publicación puede ser útil.
fuente
Primero: no necesita preocuparse por usar el código de rendimiento lento de la respuesta de Raghav Sood .
Segundo: no necesita escribir una función de extensión proporcionada por la respuesta de w3bshark cuando usa Kotlin.
Finnaly: todo lo que necesita hacer es usar la biblioteca Kotlin android-ktx de Google (consulte aquí para obtener más información y cómo incluirla en su proyecto):
ACTUALIZAR:
Porque creo que puede ayudar a alguien más y demostrar cuán lejos puedes llegar aquí son más casos de uso.
Cuando necesite mostrar un texto con algunas partes en azul y cursiva:
Cuando necesite mostrar un texto en negrita y cursiva:
En resumen,
bold
,append
,color
yitalic
son funciones de extensión aSpannableStringBuilder
. Puede ver otras funciones de extensión en la documentación oficial , desde donde puede pensar en otras posibilidades.fuente
Pensé que la respuesta elegida no proporcionó un resultado satisfactorio. He escrito mi propia función que toma 2 cadenas; El texto completo y la parte del texto que desea poner en negrita.
Devuelve un SpannableStringBuilder con el 'textToBold' de 'text' en negrita.
Encuentro útil la capacidad de poner en negrita una subcadena sin envolverla en etiquetas.
fuente
Como dijo wtsang02, el uso de HTML es una sobrecarga costosa. Solo usa la solución nativa. Si no tiene que modificar la cadena, simplemente use SpannableString, no SpannableStringBuilder.
fuente
En caso de que desee utilizar la cadena de XML, puede hacer algo como esto:
strings.xml (la parte "CDATA" es importante, de lo contrario no funcionará)
archivo de diseño
código
fuente
<string name="test"><b>text bold</b> other text</string>
. No funciona si escribo<![CDATA[
Es simple simplemente cerrar el texto especificado como este, por ejemplo
<b>"your text here:"</b>
resultado: Sede central: Mooresville, Carolina del Norte, EE. UU.
fuente
Si está utilizando Kotlin, se vuelve aún más fácil hacerlo
core-ktx
, ya que proporciona un lenguaje de dominio específico (DSL) para hacer esto:Más opciones proporcionadas por él son:
Por fin, solo puedes:
fuente
Aquí hay una mejor solución si desea que varios textos estén en negrita. He mejorado el código de Eitan. gracias Eitan
fuente
Basado en la respuesta de @ mladj0ni, obtuve el siguiente código para trabajar. El problema era que si usa String.format , elimina el marcado html, por lo que debe escapar de los símbolos de corchetes en strings.xml:
strings.xml:
<string name="welcome_messages">Hello, %1$s! You have <b>%2$d new messages</b>.</string>
code.java:
Es más simple que SpannableStringBuilder. En cuanto al rendimiento, si está mostrando solo una cadena, el usuario no notará el milisegundo adicional para analizarlo.
Vea la documentación aquí .
fuente
Puede usar este código para establecer parte de su texto en negrita. Para lo que sea que esté entre las etiquetas html en negrita, lo hará en negrita.
fuente
Prueba esto. Definitivamente puede ayudar
fuente
Haga que el primer carácter de cadena sea intercambiable mientras busca caracteres en la lista / reciclador como
anteriormente destacando así, pero quería ser como a continuación
para esto busqué la longitud de la palabra si es igual a 1, separé la cadena principal en palabras y calculé la posición de inicio de la palabra, luego busqué la palabra que comience con char.
fuente
Vine aquí para proporcionar una solución más actualizada, porque no estaba satisfecho con las respuestas existentes. Necesitaba algo que funcionara para textos traducidos y no tiene el impacto de usar
Html.fromHtml()
. Si está utilizando Kotlin, aquí hay una función de extensión que establecerá fácilmente varias partes de su texto en negrita . Esto funciona igual que Markdown, y podría extenderse para admitir otras etiquetas de Markdown, si es necesario.fuente
wtsang02 respuesta de es la mejor manera de hacerlo, ya que Html.fromHtml ("") ahora está en desuso. Aquí voy a mejorarlo un poco para quien tenga problemas para hacer que la primera palabra en negrita sea dinámica, sin importar el tamaño de la oración.
Primero, creemos un método para obtener la primera palabra:
Ahora supongamos que tiene una cadena larga como esta:
¡Y quieres que tu oración sea como [email protected] quiere que sea tu amigo! Todo lo que tienes que hacer es obtener la primera palabra y obtener la longitud para hacer que la primera palabra sea en negrita, algo como esto:
Ahora solo sigue los pasos de wtsang02 , así:
¡Y eso es! Ahora deberías poder poner en negrita una palabra con cualquier tamaño de oración larga / corta. Espero que ayude a alguien, feliz codificación :)
fuente
Esta es la función de extensión de Kotlin que uso para esto
Uso:
.
fuente
Puede agregar las dos cadenas por separado en el generador, una de ellas es spanSString, la otra es una normal. De esta manera no tiene que calcular los índices.
fuente
si la posición del texto en negrita es fija (por ejemplo: si está al comienzo de textView), use dos textView diferentes con el mismo fondo. Luego puede hacer que el otro textStyle de textView sea negrita.
Esto requerirá el doble de memoria en comparación con un solo TextView, pero la velocidad aumentará.
fuente
Otro código mas personalizado
fuente
En caso de que alguien esté usando el enlace de datos. Podemos definir un adaptador de enlace como este
Entonces podemos usarlo en un TextView
donde bold_text es
fuente
Encontró una manera en caso de que desee manejar la localización en varios idiomas, es aburrido pero funciona, supongamos que queremos esto:
En inglés:
En español:
Tienes que crear 3 cuerdas
Inglés:
Español:
Ahora puedes hacer esto:
fuente
Su recurso de cadena
tu clase de java
fuente
Aquí está mi solución completa para valores dinámicos de cadenas con verificación de casos.
P.ej. completeString = "Estoy en negrita"
CASO I si
*targetStringToFormat* = "bold"
y*matchCase* = true
CASO II si
*targetStringToFormat* = "bold"
y*matchCase* = false
Aplicar:
¡Espero que ayude!
fuente