android recyclerview highlight selected item
Android: resalta una palabra en un TextView (6)
Lo haces en xml strings
si tus cadenas son estáticas
<string name="my_text">This text is <font color=''red''>red here</font></string>
Tengo una database search query
búsqueda en la base de datos que busca en la base de datos una palabra ingresada por el usuario y devuelve un Cursor
.
En mi ListActivity
, tengo un ListView
que contendrá los elementos (los elementos del Cursor). El diseño de los elementos ListView
es básicamente un TextView
. Quiero decir, ListView
será una lista de TextView
.
Lo que quiero es resaltar el search term
donde aparezca en el TextView
. Me refiero a destacar: diferente color o diferente color de fondo o cualquier cosa lo hace diferente al resto del texto.
es posible? ¿y cómo?
Actualizar:
cursor = myDbHelper.search(term); //term: a word entered by the user.
cursor.moveToFirst();
String[] columns = {cursor.getColumnName(1)};
int[] columnsLayouts = {R.id.item_title}; //item_title: the TextView holding the one raw
ca = new SimpleCursorAdapter(this.getBaseContext(), R.layout.items_layout, cursor,columns , columnsLayouts);
lv = getListView();
lv.setAdapter(ca);
Para @Shailendra: El método search()
devolverá algunos títulos. Quiero resaltar las palabras en los títulos que coincidan con el term
palabra. Espero que esto esté claro ahora.
No lo he hecho, pero parece prometedor:
http://developer.android.com/reference/android/text/SpannableString.html
http://developer.android.com/guide/topics/resources/string-resource.html
public final void setText (texto de CharSequence)
Dado que: API Nivel 1 Establece el valor de la cadena de TextView. TextView no acepta el formato similar al HTML, que puede hacer con cadenas de texto en archivos de recursos XML. Para darle un estilo a sus cadenas, adjunte los objetos android.text.style. * A SpannableString, o consulte la documentación de Tipos de recursos disponibles para ver un ejemplo de cómo configurar el texto formateado en el archivo de recursos XML.
http://developer.android.com/reference/android/widget/TextView.html
Prueba esta biblioteca Android TextHighlighter .
Implementaciones
TextView.setText()
obtiene un parámetro como Spannable
no solo CharacterSequence
. SpannableString tiene un método setSpan()
que permite aplicar estilos.
Vea la lista de la subclase directa formulario CharacterStyle https://developer.android.com/reference/android/text/style/CharacterStyle.html
- ejemplo de dar color de fondo y color de primer plano para la palabra "Hola" en "Hola, mundo"
Spannable spannable = new SpannableString("Hello, World");
// setting red foreground color
ForegroundSpan fgSpan = new ForegroundColorSpan(Color.red);
// setting blue background color
BackgroundSpan bgSpan = new BackgroundColorSPan(Color.blue);
// setSpan requires start and end index
// in our case, it''s 0 and 5
// You can directly set fgSpan or bgSpan, however,
// to reuse defined CharacterStyle, use CharacterStyle.wrap()
spannable.setSpan(CharacterStyle.wrap(fgSpan), 0, 5, 0);
spannable.setSpan(CharacterStyle.wrap(bgSpan), 0, 5, 0);
// apply spannableString on textview
textView.setText(spannable);
Sé que es una pregunta antigua, pero he creado un método para resaltar una palabra repetida en string / paragraph.
private Spannable highlight(int color, Spannable original, String word) {
String normalized = Normalizer.normalize(original, Normalizer.Form.NFD)
.replaceAll("//p{InCombiningDiacriticalMarks}+", "");
int start = normalized.indexOf(word);
if (start < 0) {
return original;
} else {
Spannable highlighted = new SpannableString(original);
while (start >= 0) {
int spanStart = Math.min(start, original.length());
int spanEnd = Math.min(start+word.length(), original.length());
highlighted.setSpan(new ForegroundColorSpan(color), spanStart,
spanEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
start = normalizedText.indexOf(word, spanEnd);
}
return highlighted;
}
}
uso:
textView.setText(highlight(primaryColor, textAll, wordToHighlight));
inserte el código HTML para el color, luego ajuste esto a su texto.
me gusta
origString = origString.replaceAll(textToHighlight,"<font color=''red''>"+textToHighlight+"</font>");
Textview.setText(Html.fromHtml(origString));
TextView textView = (TextView)findViewById(R.id.mytextview01);
//use a loop to change text color
Spannable WordtoSpan = new SpannableString("partial colored text");
WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 2, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(WordtoSpan);
Los números 2 y 4 son índices de inicio / detención para la coloración del texto, en este ejemplo "rti" estaría coloreado.
Entonces, básicamente, encontrará el índice inicial de su palabra de búsqueda en el título:
int startIndex = titleText.indexOf(term);
int stopIndex = startIndex + term.length();
y luego reemplace los números 2 y 4 con los índices y el "texto de color parcial" con su cadena de título.
fuente: https://.com/a/10279703/2160827