Android: html in strings.xml


92

Vorrei visualizzare ad esempio questo codice html:

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

Voglio visualizzarlo in una finestra di dialogo dichiarando html nelle risorse strings.xml. Come posso farlo?


Risposte:


218

Il modo migliore per aggiungere codice sorgente html in strings.xml è usare <![CDATA[html source code]]>. Ecco un esempio:

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

Quindi puoi visualizzare questo html in TextView usando:

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

Se hai collegamenti nel tuo html e vuoi che siano cliccabili, usa questo metodo:

myTextView.setMovementMethod(LinkMovementMethod.getInstance());

9
Puoi usare HTML senza CDATA se usi semplicemente getText()invece di getString(): stackoverflow.com/a/18199543/89818
caw

16
Sì, ma con CDATAl'effettivo HTML che includi è molto più semplice - non c'è bisogno di tradurre tutto il <,>, ecc. Copia semplicemente il vero HTML e incollalo nel tuo strings.xml
Richard Le Mesurier

Grazie, funziona bene. Vorrei solo sapere come centrare il testo verticalmente nella textview.
Herman

7
seleziona il testo per il quale desideri CDATA .. e premi ctrl + alt + T -> seleziona "Surrounf with CDATA section"
Prashant Jajal

Mi dispiace ma non funziona. L'unica soluzione valida che ho trovato funzionante con string, u, ie tutti i tag supportati per Html.from è quella di wsanville, quindi usa & lt e & gt per aprire e chiudere il tag HTML.
Peter,

27

Ecco la maggior parte degli esempi. Non credo che il pretag sia supportato.

inserisci qui la descrizione dell'immagine

Questo è il strings.xmlfile:

<?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>

Ecco il layout. Nota affinché il collegamento sia effettivamente cliccabile, è necessario un po 'di lavoro extra:

<?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>

Infine, il codice:

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

Grazie a dio è possibile utilizzare & lt; e & gt; Funziona molto bene.
Torsten Ojaperv

6

String.xml può contenere entità HTML, in questo modo:

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

Nel tuo codice: getResources().getString(R.string.hello_world);restituirà "<span>". Puoi utilizzare questo testo formattato HTML in questo modo:

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

3

Tutto lo stile supportato dal sistema di risorse XML è spiegato nella documentazione di Android.

Risorse stringa: formattazione e stile

Tutto ciò che è incluso può essere utilizzato e impostato direttamente TextView. Se è necessario utilizzare ulteriori markup HTML, è necessario inserire codice HTML (con caratteri di escape per &lt;, &gt;e simili) nella risorsa e caricare l'intera cosa in una WebView.


2

Questo ha funzionato per me:

<?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>

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.