Cómo colorear texto utilizando Regex en android

Tengo tres expresiones regulares:

Pattern mentionPattern = Pattern.compile("(@[A-Za-z0-9_-]+)"); Pattern hashtagPattern = Pattern.compile("(#[A-Za-z0-9_-]+)"); Pattern urlPattern = Patterns.WEB_URL; 

Tengo una cadena:

Este es un #sample #twitter texto de @tom_cruise con un enlace http://tom_cruise.me

Necesito emparejar este texto con la expresión regular tres arriba y colorear el texto emparejado con azul y fijar el texto final en un TextView . ¿Cómo puedo lograrlo?

Hay que mencionar que no necesito Linkify el texto, sólo color. Y no estoy usando Twitter4j Library.

2 Solutions collect form web for “Cómo colorear texto utilizando Regex en android”

He reemplazado http://tom_cruise.me con http://www.google.com . Pruebe lo siguiente:

 String a = "This is a #sample #twitter text of @tom_cruise with a link http://www.google.com"; Pattern mentionPattern = Pattern.compile("(@[A-Za-z0-9_-]+)"); Pattern hashtagPattern = Pattern.compile("(#[A-Za-z0-9_-]+)"); Pattern urlPattern = Patterns.WEB_URL; StringBuffer sb = new StringBuffer(a.length()); Matcher o = hashtagPattern.matcher(a); while (o.find()) { o.appendReplacement(sb, "<font color=\"#437C17\">" + o.group(1) + "</font>"); } o.appendTail(sb); Matcher n = mentionPattern.matcher(sb.toString()); sb = new StringBuffer(sb.length()); while (n.find()) { n.appendReplacement(sb, "<font color=\"#657383\">" + n.group(1) + "</font>"); } n.appendTail(sb); Matcher m = urlPattern.matcher(sb.toString()); sb = new StringBuffer(sb.length()); while (m.find()) { m.appendReplacement(sb, "<font color=\"#EDDA74\">" + m.group(1) + "</font>"); } m.appendTail(sb); textView.setText(Html.fromHtml(sb.toString())); 

Eche un vistazo a SpannableString y SpannableStringBuilder . Un ejemplo de uso de SpannableStringBuilder está disponible en https://stackoverflow.com/a/16061128/1321873

Podrías escribir un método que acepte la String sin estilo y devuelve un CharSequence así:

 private CharSequence getStyledTweet(String tweet){ SpannableStringBuilder stringBuilder = new SpannableStringBuilder(tweet); //Find the indices of the hashtag pattern, mention pattern and url patterns //and set the spans accordingly //... return stringBuilder; } 

y luego utilice el valor devuelto de lo anterior para establecer el texto de TextView

 TextView tView = (TextView)findViewById(R.id.myText); tView.setText(getStyledTweet(tweet)); 
  • Palabra árabe Buscando en el archivo de texto en árabe
  • Excluir etiquetas HTML y algunos caracteres UNICODE mientras busca en SQLite
  • Android java regex coinciden con todos menos un carácter
  • cómo encontrar si el texto de entrada es una url usando regex
  • Fuerza de cierre en la expresión regular!
  • Android reemplazar con regex
  • Validar cadena con regex en android
  • ¿Hay una manera rápida de reconocer códigos HTML ASCII en una cadena o TextView?
  • Cómo validar String usando expresión regular en java
  • Regex para determinar las tarjetas de crédito en Android
  • ¿Cómo busco una lista de correo electrónico para un formato determinado?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.