Odpowiedzi, które tutaj są poprawne, ale nie można nazwać w pętli, ponieważ obiekt StyleSpan
jest pojedynczym przyległe rozpiętość (nie jest to styl, który można zastosować do wielu przęseł). Wielokrotne wywołanie setSpan
z tym samym pogrubieniem StyleSpan
spowodowałoby utworzenie pogrubionej rozpiętości i po prostu przesunięcie w obszarze nadrzędnym.
W moim przypadku (wyświetlając wyniki wyszukiwania) musiałem ustawić pogrubienie wszystkich wystąpień wszystkich słów kluczowych wyszukiwania. To, co zrobiłem:
private static SpannableStringBuilder emboldenKeywords(final String text,
final String[] searchKeywords) {
// searching in the lower case text to make sure we catch all cases
final String loweredMasterText = text.toLowerCase(Locale.ENGLISH);
final SpannableStringBuilder span = new SpannableStringBuilder(text);
// for each keyword
for (final String keyword : searchKeywords) {
// lower the keyword to catch both lower and upper case chars
final String loweredKeyword = keyword.toLowerCase(Locale.ENGLISH);
// start at the beginning of the master text
int offset = 0;
int start;
final int len = keyword.length(); // let's calculate this outside the 'while'
while ((start = loweredMasterText.indexOf(loweredKeyword, offset)) >= 0) {
// make it bold
span.setSpan(new StyleSpan(Typeface.BOLD), start, start+len, SPAN_INCLUSIVE_INCLUSIVE);
// move your offset pointer
offset = start + len;
}
}
// put it in your TextView and smoke it!
return span;
}
Należy pamiętać, że powyższy kod nie jest wystarczająco silny, aby przejść dwukrotnie pogrubienie jeśli jedno słowo kluczowe jest podciąg od drugiej.Na przykład, jeśli szukać „Fish fi” wewnątrz „ryby w Morzu fisty” uczyni to „fish” bold raz i wtedy „fi” porcji. Dobrą rzeczą jest to, że podczas gdy nieefektywne i nieco niepożądana, to nie będzie miało wadę wizualny jak Twój wyświetlany wynik będzie nadal wyglądać
Ryby es w fi chlewie Morza
tak to worked..thank ty – Housefly
to będzie działać z niestandardowych czcionek? – Siavash
@Siavash - Działa z niestandardowymi czcionkami. – Dimmy3