5

Ich bin ein wenig verwirrt über die "Regeln", wenn ein TextView-Element Text in formatierter Form anzeigt oder nicht.HTML-Formatierung für TextView

eine Zeichenfolge wie

"There are <i>different ways</i> of coding.\n"; 

Displays ohne Formatierung (einschließlich der HTML-Codes), wenn der Code I

tvMyTextView.setText("There are <i>different ways</i> of coding.\n"); 

aber wenn ich die gleiche Zeichenfolge in strings.xml definieren und laden, dann

tvMyTextView.setText(R.strings.TestString); 

es zeigt hervorgehoben.

noch mehr verwirrt Ich fühle mich bei dem Versuch, URLs in Textview ist einzubetten wie hier:

"Click <a href="http://www.poon-world.com">here</a> to switch on the red light.\n"; 

Unnötig zu sagen, ich habe bereits versucht, die verschiedenen Eigenschaftenoptionen von Textview - aber sie scheinen nicht viel von einem machen Unterschied, es sei denn, ich habe etwas verpasst. In einigen Fällen ist die URL im Text codiert, in blauer Farbe und kann angeklickt werden, in anderen kann ich die HTML-Formatierung sehen. In anderen wiederum ist es farbcodiert und die URL scheint irgendwie im Text kodiert zu sein - aber nichts passiert, wenn ich darauf klicke. Bezüglich der Einbettung von URLs konnte ich, anders als beim anderen Beispiel mit "einfacher" HTML-Formatierung, noch nicht einmal eine Regel herausfinden, wann sie funktioniert und wann nicht. Kann mir jemand helfen, die Knoten in meinem Kopf zu lösen ..

+0

versuchen Sie dies MAC

Antwort

5

Eigentlich aus dem Android Docs ..

public final void setText (CharSequence text) 

Setzt den String-Wert des Textview. TextView akzeptiert keine HTML-ähnliche Formatierung, die Sie mit Textzeichenfolgen in XML-Ressourcendateien ausführen können. Um Ihre Strings zu stylen, fügen Sie android.text.style. * - Objekte einem SpannableString hinzu, oder lesen Sie die Dokumentation zu verfügbaren Ressourcentypen, um ein Beispiel für das Festlegen von formatiertem Text in der XML-Ressourcendatei zu erhalten.

Aber

public final void setText (int resid) 
  • nicht mehr Spezifikation drauf ..

Aber von Android Ressource String docs ..

Sie Styling Ihre Strings mit HTML-Markup hinzufügen . Zum Beispiel:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="welcome">Welcome to <b>Android</b>!</string> 
</resources> 

Unterstützte HTML-Elemente enthalten:

<b> for bold text. 
<i> for italic text. 
<u> for underline text. 

Manchmal können Sie einen Stil Text-Ressource erstellen möchten, die auch als Format-String verwendet wird.Normalerweise wird dies nicht funktionieren, da die Methode String.format(String, Object...) alle Stilinformationen aus der Zeichenfolge entfernt. Die Umgehung dazu besteht darin, die HTML-Tags mit Escape-Entities zu schreiben, die dann nach der Formatierung mit fromHtml(String) wiederhergestellt werden.

Und über Ihre URL-String, ...

tvMyTextView.setText(Html.fromHtml("Click <a href="http://www.poon-world.com">here</a> to switch on the red light.\n")); 

in diesem SO Set TextView text from html-formatted string resource in XML

und

Android String Resource

0

Schauen Sie auch Frage ein paar Notizen zu meiner eigenen Fragen hinzufügen und nachdem ich die Antworten bis jetzt erhalten habe, kann ich nur zu dem Schluss kommen, dass es keinen zuverlässigen Weg gibt, der überall funktioniert.

In einigen Fällen - wenn eine formatierte URL Teil des Klartextes ist und nicht von Tags umschlossen wird (wie http://www.poon-world.com, scheint auch nur "PoonWorld.com" in den meisten Fällen zu funktionieren), einfach Das Festlegen der Eigenschaften von TextView scheint ausreichend zu sein und die Links können anklickbar sein. Wenn Links jedoch in HTML-Tags eingebettet sind und von einem Linktext anklickbar sein sollen, scheint es keinen anderen Weg zu geben, als mit Html.fromHtml (..) zu gehen.

Aber es gibt auch ein paar spezielle Fälle, die ich nicht erklären kann: In einigen Aktivitäten/Layouts verwende ich "eingebettete" URLs und habe die zuvor erwähnten Click-Eigenschaften gesetzt, verwende nicht Html.fromHtml. und überrascht !, einen Klick auf den in der Tat in dem Text erstellt Links in der Tat öffnet den Browser, aber nur, nachdem Sie die folgende Zeile in dem Code in dem OnCreate-Ereignisse hinzugefügt:

myTextView.setMovementMethod(LinkMovementMethod.getInstance()); 

(ich habe diesen Trick in einem anderen thread, danke an den Autor) Keine Ahnung warum, so scheint es, dass die String-Ressourcen von Android geparst und ausgewertet werden. Ich habe nur erwähnt, dass zu all dem bereits gesagt wurde, dass alle anderen, die nach Lösungen suchen und verwirrt sind, nicht anfangen zu denken, dass er seinen Verstand verliert - nein, testet einfach die Ansätze, die hier auf dieser Seite erwähnt werden trainieren.

Verwandte Themen