Android: html dans strings.xml

92

Je voudrais afficher par exemple ce code 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>

Je veux l'afficher sur une boîte de dialogue en déclarant html dans les ressources strings.xml. Comment puis-je le faire?

Alberto Alberto
la source

Réponses:

218

La meilleure façon d'ajouter du code source html dans strings.xml est d'utiliser <![CDATA[html source code]]>. Voici un exemple:

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

Ensuite, vous pouvez afficher ce code HTML dans TextView en utilisant:

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

Si vous avez des liens dans votre html et que vous souhaitez qu'ils soient cliquables, utilisez cette méthode:

myTextView.setMovementMethod(LinkMovementMethod.getInstance());
Mario Kutlev
la source
9
Vous pouvez utiliser HTML sans CDATA si vous utilisez simplement à la getText()place de getString(): stackoverflow.com/a/18199543/89818
caw
16
Oui, mais avec CDATAle HTML réel que vous incluez est beaucoup plus facile - pas besoin de traduire tous les <,>, etc. Copiez simplement le vrai HTML et collez-le dans votre strings.xml
Richard Le Mesurier
Merci, fonctionne bien. Je voudrais juste savoir comment centrer le texte verticalement dans la vue de texte.
Herman
7
sélectionnez le texte pour lequel vous voulez CDATA .. et appuyez sur ctrl + alt + T -> sélectionnez 'Surrounf with CDATA section'
Prashant Jajal
Désolé mais ça ne marche pas. La seule solution valide que j'ai trouvée fonctionnant avec la chaîne, u, i et toutes les balises prises en charge pour Html.from est celle de wsanville, utilisez donc & lt et & gt pour ouvrir et fermer la balise HTML.
Peter le
27

Voici la plupart des exemples. Je ne pense pas que la prebalise soit prise en charge.

entrez la description de l'image ici

Voici le strings.xmlfichier:

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

Voici la mise en page. Remarque pour que le lien soit réellement cliquable, un peu de travail supplémentaire est nécessaire:

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

Enfin, le 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
la source
Dieu merci, il est possible d’utiliser & lt; et & gt; Fonctionne très bien.
Torsten Ojaperv
6

String.xml peut contenir des entités HTML, comme ceci:

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

Dans votre code: getResources().getString(R.string.hello_world);évaluera à "<span>". Vous pouvez utiliser ce texte au format HTML comme ceci:

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

Tous les styles pris en charge par le système de ressources XML sont expliqués dans la documentation Android.

Ressources de chaîne: formatage et style

Tout ce qui y est inclus peut être utilisé et réglé directement TextView. Si vous avez besoin d'utiliser davantage de balisage HTML, vous devrez placer du HTML brut (avec des caractères d'échappement pour &lt;, etc. &gt;) dans la ressource et charger le tout dans un fichier WebView.

Devunwired
la source
2

Cela a fonctionné pour moi:

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