Android-Wyróżnij słowo w widoku tekstowym?
Mam database search query
, które wyszukują w bazie danych słowo wprowadzone przez użytkownika i zwracają Cursor
.
W moim ListActivity
, mam ListView
, który będzie trzymał elementy (elementy kursora). Układ elementów ListView
jest w zasadzie TextView
. ListView
będzie listą TextView
's.
Chcę wyróżnić search term
gdziekolwiek się pojawi w TextView
. Chodzi mi o podświetlanie: inny kolor lub inny kolor tła lub cokolwiek sprawia, że różni się od reszty tekst.
Czy to możliwe? i jak?
Update:
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);
Dla @Shailendra: metoda search()
zwróci niektóre tytuły. Chcę podkreślić słowa w tych tytułach, które pasują do słowa term
. Mam nadzieję, że teraz to jasne.
6 answers
Wstaw kod HTML dla koloru, a następnie Ustaw ten tekst .
Jak
origString = origString.replaceAll(textToHighlight,"<font color='red'>"+textToHighlight+"</font>");
Textview.setText(Html.fromHtml(origString));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-05 15:58:27
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);
Liczby 2 i 4 są indeksami start/stop dla kolorowania tekstu, w tym przykładzie" rti " będzie kolorowany.
Więc w zasadzie wystarczy znaleźć indeks początkowy szukanego słowa w tytule:
int startIndex = titleText.indexOf(term);
int stopIndex = startIndex + term.length();
A następnie zastąp liczby 2 i 4 indeksami, a" częściowy kolorowy tekst " ciągiem tytułowym.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:35
Nie robiłam tego, ale wygląda to obiecująco:
http://developer.android.com/reference/android/text/SpannableString.html
http://developer.android.com/guide/topics/resources/string-resource.html
Public final void setText (tekst znaków)
Since: API Level 1 ustawia wartość string w TextView. TextView nie akceptuje formatowania w stylu HTML, co można zrobić z tekstem ciągi w plikach zasobów XML. Aby wystylizować struny, Dołącz android.tekst.styl.* obiekty do SpannableString, lub zobacz Dostępna dokumentacja typów zasobów dla przykładowego ustawienia sformatowany tekst w XML plik zasobów.
Http://developer.android.com/reference/android/widget/TextView.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-27 11:45:01
Wiem, że to stare pytanie, ale stworzyłem metodę podkreślania powtarzającego się słowa w łańcuchu \ paragraf.
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;
}
}
Użycie:
textView.setText(highlight(primaryColor, textAll, wordToHighlight));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-06 17:41:06
Wypróbuj tę bibliotekę Android TextHighlighter .
Implementacje
TextView.setText()
pobiera parametr Spannable
nie tylko CharacterSequence
. SpannableString posiada metodę setSpan()
, która umożliwia stosowanie stylów.
Zobacz listę bezpośredniego podklasy postaci CharacterStyle https://developer.android.com/reference/android/text/style/CharacterStyle.html
- przykład podania koloru tła i koloru pierwszego planu dla słowa "Hello" w "Hello, World"
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);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-25 07:27:50
Robisz to w xml strings
jeśli twoje struny są statyczne
<string name="my_text">This text is <font color='red'>red here</font></string>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-23 13:30:32