Podświetlanie koloru tekstu za pomocą Html.fromHtml () w systemie Android?

84

Tworzę aplikację, w której będzie ekran wyszukiwania, w którym użytkownik będzie mógł wyszukiwać określone słowa kluczowe i to słowo kluczowe powinno być podświetlone. Znalazłem metodę Html.fromHtml.

Ale chciałbym wiedzieć, czy to właściwy sposób, czy nie.

Proszę, daj mi znać, co masz na ten temat

sunil
źródło

Odpowiedzi:

197

Lub o wiele prostsze niż Spannableręczne traktowanie , ponieważ nie powiedziałeś, że chcesz, aby tło było podświetlone, tylko tekst:

String styledText = "This is <font color='red'>simple</font>.";
textView.setText(Html.fromHtml(styledText), TextView.BufferType.SPANNABLE);
Christopher Orr
źródło
8
Warto zauważyć, że Html.fromHtml jest wolniejszy niż SpannableString, ponieważ obejmuje parsowanie. Ale dla krótkiego tekstu to nie ma znaczenia
Michał K
Wydaje się, że pod linkiem jest inne rozwiązanie . Zobacz odpowiedź przez Legend.
Kenneth Evans
1
Jako komentarz stwierdziłem, że nie muszę przekazywać TextView.BufferType.SPANNABLE i nadal działa. Dzięki!
James
czy znasz jakiś edytor html do aranżowania długich tekstów dla Androida. na przykład próbuję korzystać z tej witryny ( html.am/html-editors/html-text-editor.cfm ), ale jeśli chcę zobaczyć źródło, zwraca on kolor <span style="color:#ff0000;">, aby Android nie zmieniał koloru.
mehmet,
@mehmet Można przypuszczalnie po prostu wyszukać i zamienić, aby zmienić tagi <span> na tagi <font> z atrybutem „color”.
Christopher Orr,
35

Korzystanie z wartości koloru z zasobu xml:

int labelColor = getResources().getColor(R.color.label_color);
String сolorString = String.format("%X", labelColor).substring(2); // !!strip alpha value!!

Html.fromHtml(String.format("<font color=\"#%s\">text</font>", сolorString), TextView.BufferType.SPANNABLE); 
Siergiej A.
źródło
ładnie wykonane. przydatne, aby móc używać kolorów z zasobów aplikacji.
speedynomads
Chcę podkreślić drugą linię, w której podciąg koloru szesnastkowego: wartość alfa spowodowałaby nieprawidłowe ustawienie koloru! Nie zapomnij o tym!
marcolav
12

Można to osiągnąć za pomocą elastycznego sznurka. Będziesz musiał zaimportować następujące elementy

import android.text.SpannableString; 
import android.text.style.BackgroundColorSpan; 
import android.text.style.StyleSpan;

Następnie możesz zmienić tło tekstu, używając czegoś takiego:

TextView text = (TextView) findViewById(R.id.text_login);
text.setText("");
text.append("Add all your funky text in here");
Spannable sText = (Spannable) text.getText();
sText.setSpan(new BackgroundColorSpan(Color.RED), 1, 4, 0);

Tam, gdzie to podświetli znaki w poz. 1 - 4 kolorem czerwonym. Mam nadzieję że to pomoże!

stealthcopter
źródło
5
 String name = modelOrderList.get(position).getName();   //get name from List
    String text = "<font color='#000000'>" + name + "</font>"; //set Black color of name
    /* check API version, according to version call method of Html class  */
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N) {
        Log.d(TAG, "onBindViewHolder: if");
        holder.textViewName.setText(context.getString(R.string._5687982) + " ");
        holder.textViewName.append(Html.fromHtml(text));
    } else {
        Log.d(TAG, "onBindViewHolder: else");
        holder.textViewName.setText("123456" + " ");   //set text 
        holder.textViewName.append(Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY));   //append text into textView
    }
Khyati Fatania
źródło
jak uzyskać kolor czcionki z color.xml?
Noor Hossain
4

Alternatywne rozwiązanie: zamiast tego użyj WebView. HTML jest łatwy w obsłudze.

WebView webview = new WebView(this);

String summary = "<html><body>Sorry, <span style=\"background: red;\">Madonna</span> gave no results</body></html>";

webview.loadData(summary, "text/html", "utf-8");
Vidar Vestnes
źródło
2

czcionka jest przestarzała, zamiast tego użyj zakresu Html.fromHtml("<span style=color:red>"+content+"</span>")

mhdtouban
źródło
1

Aby część tekstu była podkreślona i pokolorowana

w twoim strings.xml

<string name="text_with_colored_underline">put the text here and &lt;u>&lt;font color="#your_hexa_color">the underlined colored part here&lt;font>&lt;u></string>

następnie w działaniu

yourTextView.setText(Html.fromHtml(getString(R.string.text_with_colored_underline)));

a dla klikalnych linków:

<string name="text_with_link"><![CDATA[<p>text before link<a href=\"http://www.google.com\">title of link</a>.<p>]]></string>

aw Twojej działalności:

yourTextView.setText(Html.fromHtml(getString(R.string.text_with_link)));
yourTextView.setMovementMethod(LinkMovementMethod.getInstance());
bsma
źródło
0
textview.setText(Html.fromHtml("<font color='rgb'>"+text contain+"</font>"));

Daje to kolor dokładnie taki, jaki stworzyłeś w edytorze html, po prostu ustaw textview i połącz go z wartością textview. Android nie obsługuje koloru zakresu, zmień go na kolor czcionki w edytorze i wszystko gotowe.

Naina
źródło
0

Najpierw przekonwertuj swój ciąg na HTML, a następnie przekonwertuj go na spannable. wykonaj sugestie następujących kodów.

 Spannable spannable = new SpannableString(Html.fromHtml(labelText));
                    
spannable.setSpan(new ForegroundColorSpan(Color.parseColor(color)), spannable.toString().indexOf("•"), spannable.toString().lastIndexOf("•") + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            
Ch Khurram
źródło