Hervorheben der Textfarbe mit Html.fromHtml () in Android?

84

Ich entwickle eine Anwendung, in der es einen Suchbildschirm geben wird, in dem Benutzer nach bestimmten Schlüsselwörtern suchen können und dieses Schlüsselwort hervorgehoben werden sollte. Ich habe die Methode Html.fromHtml gefunden.

Aber ich werde gerne wissen, ob es die richtige Art ist, es zu tun oder nicht.

Bitte teilen Sie mir Ihre Meinung dazu mit.

sunil
quelle
Schauen Sie sich ein funktionierendes Beispiel an. javatechig.com/2013/04/07/how-to-display-html-in-android-view
Nilanchal

Antworten:

197

Oder viel einfacher als Spannablemanuell mit s umzugehen , da Sie nicht gesagt haben, dass der Hintergrund hervorgehoben werden soll, sondern nur der Text:

String styledText = "This is <font color='red'>simple</font>.";
textView.setText(Html.fromHtml(styledText), TextView.BufferType.SPANNABLE);
Christopher Orr
quelle
8
Es ist erwähnenswert, dass Html.fromHtml langsamer als SpannableString ist, da es sich um eine Analyse handelt. Aber für einen kurzen Text spielt es keine Rolle
Michał K
Unter Link scheint es eine andere Lösung zu geben . Siehe die Antwort von Legend.
Kenneth Evans
1
Nur als Kommentar stellte ich fest, dass ich TextView.BufferType.SPANNABLE nicht übergeben musste und es immer noch funktionierte. Vielen Dank!
James
Kennen Sie einen HTML-Editor zum Erstellen von Langtext für Android? Zum Beispiel versuche ich, diese Seite zu verwenden ( html.am/html-editors/html-text-editor.cfm ), aber wenn ich die Quelle sehen möchte, gibt sie Farbe zurück, <span style="color:#ff0000;">damit Android die Farbe nicht ändert.
Mehmet
@mehmet Sie könnten vermutlich einfach suchen und ersetzen, um die <span> -Tags in <font> -Tags mit einem "color" -Attribut zu ändern.
Christopher Orr
35

Verwenden des Farbwerts aus der XML-Ressource:

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); 
SergeyA
quelle
schön gemacht. nützlich, um Farben aus Ihren Apps-Ressourcen verwenden zu können.
Speedynomads
Ich möchte die zweite Zeile hervorheben, in der Sie die Farbe hex: Der Alpha-Wert würde die Farbeinstellung ungültig machen! Vergiss es nicht!
Marco
12

Dies kann mit einem Spannable String erreicht werden. Sie müssen Folgendes importieren

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

Und dann können Sie den Hintergrund des Textes folgendermaßen ändern:

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);

Wo dies die Zeichen an Position 1 - 4 mit einer roten Farbe hervorhebt. Hoffe das hilft!

Stealthcopter
quelle
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
quelle
4

Alternative Lösung: Verwenden Sie stattdessen ein WebView. HTML ist einfach zu bearbeiten.

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
quelle
2

Die Schriftart ist veraltet. Verwenden Sie stattdessen span Html.fromHtml("<span style=color:red>"+content+"</span>")

mhdtouban
quelle
0
textview.setText(Html.fromHtml("<font color='rgb'>"+text contain+"</font>"));

Die Farbe wird genau so angezeigt, wie Sie sie im HTML-Editor erstellt haben. Legen Sie einfach die Textansicht fest und verknüpfen Sie sie mit dem Wert für die Textansicht. Android unterstützt keine Span-Farbe. Ändern Sie sie im Editor in Schriftfarbe, und schon kann es losgehen.

Naina
quelle
0

Um einen Teil Ihres Textes unterstrichen und farbig zu machen

in Ihrer 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>

dann in der Aktivität

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

und für anklickbare Links:

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

und in Ihrer Tätigkeit:

yourTextView.setText(Html.fromHtml(getString(R.string.text_with_link)));
yourTextView.setMovementMethod(LinkMovementMethod.getInstance());
bsma
quelle
0

Konvertieren Sie zuerst Ihren String in HTML und konvertieren Sie ihn dann in spannbar. Schlagen Sie die folgenden Codes vor.

 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
quelle