Nie zapomnij uciec przed wejściem użytkownika za pomocą Html.escapeHtml(str).
kelunik
1
Dodano na poziomie API 1
2red13
3
Tylko ostrzeżenie. Miałem problem, gdy potrzebowałem, aby mój tekst był pisany wielkimi literami. Używałem android: textAllCaps = "true" w XML i jednocześnie zawartość HTML była zapisana wielkimi literami. To nie działało. Usunąłem atrybut XML i teraz działa dobrze. Uważaj, bo jeśli użyjesz setAllCaps () w kodzie, pojawi się ten sam problem.
Nie działa dla mnie, otrzymuję `java.lang.StringIndexOutOfBoundsException: length = 3; index = 12`
Muhammad Babar
1
StringIndexOutOfBoundsException sam w sobie wyjaśnia. Uzyskujesz dostęp do ciągu poza jego długością.
Swapnil Kotwal
1
Moje ciągi nie zostały naprawione, więc ciągi byłyby generowane w czasie wykonywania aplikacji. Wypróbowałem prawie wszystkie odpowiedzi na to pytanie. Ale tylko to rozwiązanie działało u mnie.
Md. Sabbir Ahmed
33
Możesz użyć, Spannableaby zastosować efekty do TextView:
Oto mój przykład na kolorowanie tylko pierwszej części TextViewtekstu (pozwalając na dynamiczne ustawianie koloru, a nie na sztywne kodowanie go w łańcuchu, jak w przykładzie HTML!)
mTextView.setText("Red text is here",BufferType.SPANNABLE);Spannable span =(Spannable) mTextView.getText();
span.setSpan(newForegroundColorSpan(0xFFFF0000),0,"Red".length(),Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
W tym przykładzie możesz zamienić 0xFFFF0000 na getResources().getColor(R.color.red)
TextView textView=(TextView)findViewById(R.id.yourTextView);//init//here I am appending two string into my textView with two diff colors.//I have done from fragment so I used here getActivity(), //If you are trying it from Activity then pass className.this or this;
textView.append(TextViewUtils.getColoredString(getString(R.string.preString),ContextCompat.getColor(getActivity(),R.color.firstColor)));
textView.append(TextViewUtils.getColoredString(getString(R.string.postString),ContextCompat.getColor(getActivity(),R.color.secondColor)));
Wewnątrz klasy TextViewUtils dodaj tę metodę
/***
*
* @param mString this will setup to your textView
* @param colorId text will fill with this color.
* @return string with color, it will append to textView.
*/publicstaticSpannable getColoredString(String mString,int colorId){Spannable spannable =newSpannableString(mString);
spannable.setSpan(newForegroundColorSpan(colorId),0, spannable.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);Log.d(TAG,spannable.toString());return spannable;}
Napisałem kod dla innego pytania, które jest podobne do tego, ale to pytanie zostało zduplikowane, więc nie mogę tam odpowiedzieć, więc umieszczam tutaj mój kod, jeśli ktoś szuka tego samego wymagania.
To nie jest w pełni działający kod, musisz wprowadzić drobne zmiany, aby działał.
Oto kod:
Skorzystałem z pomysłu @Graeme, aby używać spannable text.
String colorfulText ="colorfulText";Spannable span =newSpannableString(colorfulText);for(int i =0, len = colorfulText.length(); i < len; i++){
span.setSpan(newForegroundColorSpan(getRandomColor()), i, i+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}((TextView)findViewById(R.id.txtSplashscreenCopywrite)).setText(span);
Tam, gdzie to możliwe, należy używać klasy SpannableBuilder zamiast formatowania HTML, ponieważ jest to szybsze niż analizowanie formatu HTML. Zobacz mój własny test porównawczy „SpannableBuilder vs HTML” na Github
Dzięki!
Niesamowite odpowiedzi! Udało mi się użyć Spannable do zbudowania tekstu w kolorze tęczy (więc można to powtórzyć dla dowolnej tablicy kolorów). Oto moja metoda, jeśli komuś pomoże:
privateSpannable buildRainbowText(String pack_name){int[] colors =newint[]{Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE,Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE,Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE,Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE};Spannable word =newSpannableString(pack_name);for(int i =0; i < word.length(); i++){
word.setSpan(newForegroundColorSpan(colors[i]), i, i+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}return word;}
A potem po prostu setText (buildRainboxText (nazwa_paczki)); Zwróć uwagę, że wszystkie słowa, które przekazuję, mają mniej niż 15 znaków, a to po prostu powtarza 5 kolorów 3 razy - chcesz dostosować kolory / długość tablicy do swoich potrzeb!
Od API 24 masz FROM_HTML_OPTION_USE_CSS_COLORS, więc możesz definiować kolory w CSS zamiast powtarzać to za każdym razem z font color="
Dużo wyraźniejszym - kiedy masz trochę html i chcesz podświetlić jakieś predefiniowane tagi - wystarczy dodać fragment CSS na górze html
Odpowiedzi:
tak, jeśli sformatujesz właściwość
String
withhtml
,font-color
przekaż ją do metodyHtml.fromHtml(your text here)
źródło
Html.escapeHtml(str)
.Html.fromHtml(String)
jest teraz przestarzała, zamiast tego użyjHtml.fromHtml(String, Html.FROM_HTML_MODE_LEGACY)
. Więcej informacji można znaleźć tutaj.Możesz drukować wiersze w wielu kolorach bez kodu HTML jako:
źródło
Możesz użyć,
Spannable
aby zastosować efekty doTextView
:Oto mój przykład na kolorowanie tylko pierwszej części
TextView
tekstu (pozwalając na dynamiczne ustawianie koloru, a nie na sztywne kodowanie go w łańcuchu, jak w przykładzie HTML!)W tym przykładzie możesz zamienić 0xFFFF0000 na
getResources().getColor(R.color.red)
źródło
Zrobiłem w ten sposób:
Zestaw kolorów na tekst przez przepuszczenie String i kolor :
Ustaw tekst na TextView / Button / EditText itp., Wywołując poniższy kod:
Widok tekstu:
Zdobądź kolorowy sznur:
Ustaw tekst w TextView dwóch ciągów o różnych kolorach:
Gotowe
źródło
Html.fromHtml("...")
połączenia doHtml.fromHtml("...", FROM_HTML_MODE_LEGACY)
Użyj SpannableStringBuilder
źródło
Hej, zrobiłem to, spróbujcie
Wewnątrz klasy TextViewUtils dodaj tę metodę
źródło
Lepiej jest użyć ciągu w pliku ciągów, jako takiego:
Stosowanie:
źródło
Napisałem kod dla innego pytania, które jest podobne do tego, ale to pytanie zostało zduplikowane, więc nie mogę tam odpowiedzieć, więc umieszczam tutaj mój kod, jeśli ktoś szuka tego samego wymagania.
To nie jest w pełni działający kod, musisz wprowadzić drobne zmiany, aby działał.
Oto kod:
Skorzystałem z pomysłu @Graeme, aby używać spannable text.
Losowa metoda koloru:
źródło
Spróbuj tego:
źródło
Tam, gdzie to możliwe, należy używać klasy SpannableBuilder zamiast formatowania HTML, ponieważ jest to szybsze niż analizowanie formatu HTML. Zobacz mój własny test porównawczy „SpannableBuilder vs HTML” na Github Dzięki!
źródło
Niesamowite odpowiedzi! Udało mi się użyć Spannable do zbudowania tekstu w kolorze tęczy (więc można to powtórzyć dla dowolnej tablicy kolorów). Oto moja metoda, jeśli komuś pomoże:
A potem po prostu setText (buildRainboxText (nazwa_paczki)); Zwróć uwagę, że wszystkie słowa, które przekazuję, mają mniej niż 15 znaków, a to po prostu powtarza 5 kolorów 3 razy - chcesz dostosować kolory / długość tablicy do swoich potrzeb!
źródło
dla 24 API i więcej (flaga)
Więcej informacji
źródło
Od API 24 masz FROM_HTML_OPTION_USE_CSS_COLORS, więc możesz definiować kolory w CSS zamiast powtarzać to za każdym razem z
font color="
Dużo wyraźniejszym - kiedy masz trochę html i chcesz podświetlić jakieś predefiniowane tagi - wystarczy dodać fragment CSS na górze htmlźródło
25 czerwca 2020 by @canerkaseler
Następnie wywołaj powyższą funkcję. Możesz zadzwonić do więcej niż jednego:
Wynik: możesz zobaczyć podkreślenie i różne kolory.
@canerkaseler
źródło