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?

Alberto Alberto
fuente

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());
Mario Kutlev
fuente
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)));
wsanville
fuente
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)));
Thomas
fuente
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.

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

Suyog Gunjal
fuente