Android: HTML in strings.xml

92

Ich möchte zum Beispiel diesen HTML-Code anzeigen:

<body>
    <p><b>Hello World</b></p>
    <p>This is a test of the URL <a href="http://www.example.com"> Example</a></p>
    <p><b>This text is bold</b></p>
    <p><em>This text is emphasized</em></p>
    <p><code>This is computer output</code></p>
    <p>This is<sub> subscript</sub> and <sup>superscript</sup></p>
</body>

Ich möchte es in einem Dialog anzeigen, indem ich HTML in Ressourcen deklariere strings.xml. Wie kann ich es tun?

Alberto Alberto
quelle

Antworten:

218

Der beste Weg, um HTML-Quellcode in strings.xml hinzuzufügen, ist die Verwendung <![CDATA[html source code]]>. Hier ist ein Beispiel:

<string name="html"><![CDATA[<p>Text</p>]]></string> 

Dann können Sie dieses HTML in TextView anzeigen, indem Sie:

myTextView.setText(Html.fromHtml(getString(R.string.html)));

Wenn Sie Links in Ihrem HTML-Code haben und möchten, dass diese anklickbar sind, verwenden Sie diese Methode:

myTextView.setMovementMethod(LinkMovementMethod.getInstance());
Mario Kutlev
quelle
9
Sie können HTML ohne CDATA verwenden, wenn Sie nur getText()anstelle von getString(): stackoverflow.com/a/18199543/89818
caw
16
Ja, aber mit CDATAdem tatsächlichen HTML, das Sie einschließen, ist es viel einfacher - Sie müssen nicht alle <,> usw. übersetzen. Kopieren Sie einfach den echten HTML-Code und fügen Sie ihn in Ihre strings.xml ein
Richard Le Mesurier
Danke, funktioniert gut. Ich möchte nur wissen, wie man Text in der Textansicht vertikal zentriert.
Herman
7
Wählen Sie den Text aus, für den Sie CDATA möchten. Drücken Sie Strg + Alt + T -> Wählen Sie 'Surrounf with CDATA section'
Prashant Jajal
Entschuldigung, aber es funktioniert nicht. Die einzig gültige Lösung, die ich gefunden habe, wenn ich mit string, u, i und allen unterstützten Tags für Html.from arbeite, ist die von wsanville. Verwenden Sie also & lt und & gt zum Öffnen und Schließen des HTML-Tags.
Peter
27

Hier sind die meisten Beispiele. Ich glaube nicht, dass das preTag unterstützt wird.

Geben Sie hier die Bildbeschreibung ein

Dies ist die strings.xmlDatei:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Formatting</string>
    <string name="link">&lt;b&gt;Hello World&lt;/b&gt; This is a test of the URL &lt;a href="http://www.example.com/"&gt;Example&lt;/a&gt;</string>
    <string name="bold">&lt;b&gt;This text is bold&lt;/b&gt;</string>
    <string name="emphasis">&lt;em&gt;This text is emphasized&lt;/em&gt;</string>
    <string name="sup">This is &lt;sub&gt;subscript&lt;/sub&gt; and &lt;sup&gt;superscript&lt;/sup&gt;</string>
</resources>

Hier ist das Layout. Hinweis: Damit der Link tatsächlich anklickbar ist, ist ein wenig zusätzliche Arbeit erforderlich:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:id="@+id/test1"
            android:linksClickable="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="12dp"
            android:text=""
            android:textAppearance="?android:attr/textAppearanceMedium"/>
        <TextView
            android:id="@+id/test2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="12dp"
            android:text=""
            android:textAppearance="?android:attr/textAppearanceMedium"/>
        <TextView
            android:id="@+id/test3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="12dp"
            android:text=""
            android:textAppearance="?android:attr/textAppearanceMedium"/>
        <TextView
            android:id="@+id/test4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="12dp"
            android:text=""
            android:textAppearance="?android:attr/textAppearanceMedium"/>
    </LinearLayout>
</ScrollView>

Zum Schluss der Code:

TextView test1 = (TextView)findViewById(R.id.test1);
Spanned spanned = Html.fromHtml(getString(R.string.link));
test1.setMovementMethod(LinkMovementMethod.getInstance());
test1.setText(spanned);

TextView test2 = (TextView)findViewById(R.id.test2);
test2.setText(Html.fromHtml(getString(R.string.bold)));

TextView test3 = (TextView)findViewById(R.id.test3);
test3.setText(Html.fromHtml(getString(R.string.emphasis)));

TextView test4 = (TextView)findViewById(R.id.test4);
test4.setText(Html.fromHtml(getString(R.string.sup)));
wsanville
quelle
Gott sei Dank ist es möglich, & lt; und & gt; Funktioniert sehr gut.
Torsten Ojaperv
6

String.xml kann HTML-Entitäten enthalten, wie folgt:

<resources>
    <string name="hello_world">&lt;span&gt;</string>
</resources>

In Ihrem Code: getResources().getString(R.string.hello_world);wird ausgewertet "<span>". Sie können diesen HTML-formatierten Text folgendermaßen verwenden:

TextView helloWorld = (TextView)findViewById(R.id.hello_world);
helloWorld.setText(Html.fromHtml(getString(R.string.hello_world)));
Thomas
quelle
3

Das gesamte vom XML-Ressourcensystem unterstützte Styling wird in der Android-Dokumentation erläutert.

String-Ressourcen: Formatierung und Styling

Alles, was dort enthalten ist, kann verwendet und direkt aktiviert werden TextView. Wenn Sie weiteren HTML - Markup verwenden müssen, müssen Sie rohes HTML platzieren (mit Escape - Zeichen für &lt;, &gt;und so weiter ) in die Ressource und die ganze Sache in einer Last WebView.

Devunwired
quelle
2

Das hat bei mir funktioniert:

<?xml version="1.0" encoding="utf-8"?>

<string name="app_name">Sangamner College</string>
<string name="about_desc"><![CDATA[In order to make higher education available in the rural environment such as of Sangamner, Shikshan Prasarak Sanstha was established in 1960. Sangamner College was established by Shikshan Prasarak Sanstha, Sangamner on 23rd January 1961 on the auspicious occasion of Birth Anniversary of Netaji Subhashchandra Bose.The Arts and Commerce courses were commenced in June 1961 and in June 1965 Science courses were introduced. When Sangamner College was founded forty years ago, in 1961, there was no college available to the rural youth of this region. <br><br></>The college was founded with the aim of upliftment of the disadvantageous rural youth in all respects. On one hand, we are aware of the social circumstances prevailing in the rural area where we are working. So, we offer the elective option to students, which are favourable to the local atmosphere. On the other hand, we want to academically empower the aspiring youth by offering vocational course in Computer Applications to students of Arts &amp; Commerce. B.B.A., B.C.A. and M.C.A. courses were started with the same purpose. “Think globally, act locally” is our guiding Principle.]]></string>

Suyog Gunjal
quelle