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.


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

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

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!


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
    }

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

2

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


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.


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

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);
            
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.