Android: html en strings.xml


92

Me gustaría mostrar, por ejemplo, este código 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>

Quiero mostrarlo en un diálogo declarando html en recursos strings.xml. ¿Cómo puedo hacerlo?


Respuestas:


218

La mejor manera de agregar código fuente html en strings.xml es usar <![CDATA[html source code]]>. Aquí hay un ejemplo:

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

Luego puede mostrar este html en TextView usando:

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

Si tiene enlaces en su html y desea que se pueda hacer clic en ellos, use este método:

myTextView.setMovementMethod(LinkMovementMethod.getInstance());

9
Puede usar HTML sin CDATA si solo usa en getText()lugar de getString(): stackoverflow.com/a/18199543/89818
caw

16
Sí, pero con CDATAel HTML real que incluye es mucho más fácil, no es necesario traducir todo el <,>, etc. Simplemente copie el HTML real y péguelo en su strings.xml
Richard Le Mesurier

Gracias, funciona bien. Solo me gustaría saber cómo centrar el texto verticalmente en la vista de texto.
Herman

7
seleccione el texto para el que desea CDATA .. y presione ctrl + alt + T -> seleccione 'Surrounf con sección CDATA'
Prashant Jajal

Lo siento, pero no funciona. La única solución válida que encontré trabajando con string, u, i y todas las etiquetas compatibles para Html.from es la de wsanville, así que use & lt y & gt para abrir y cerrar la etiqueta HTML.
Peter

27

Aquí está la mayoría de los ejemplos. No creo que la preetiqueta sea compatible.

ingrese la descripción de la imagen aquí

Este es el strings.xmlarchivo:

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

Aquí está el diseño. Tenga en cuenta que para que se pueda hacer clic en el enlace, se necesita un poco de trabajo adicional:

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

Finalmente, el código:

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

Gracias a Dios, es posible utilizar & lt; y & gt; Funciona muy bien.
Torsten Ojaperv

6

String.xml puede contener entidades HTML, así:

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

En su código: getResources().getString(R.string.hello_world);evaluará a "<span>". Puede utilizar este texto con formato HTML como este:

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

3

Todo el estilo que admite el sistema de recursos XML se explica en la documentación de Android.

Recursos de cadenas: formato y estilo

Todo lo que se incluye allí se puede usar y configurar directamente TextView. Si necesita utilizar más marcado HTML, deberá colocar HTML sin formato (con caracteres de escape para &lt;, &gt;y demás ) en el recurso y cargar todo en un archivo WebView.


2

Esto funcionó para mí:

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.