recyclerview item android android-listview highlighting android-textview

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