Android: html em strings.xml

92

Eu gostaria de exibir, por exemplo, 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>

Eu quero exibi-lo em uma caixa de diálogo, declarando html em recursos strings.xml. Como eu posso fazer isso?

Alberto Alberto
fonte

Respostas:

218

A melhor maneira de adicionar código-fonte html em strings.xml é usar <![CDATA[html source code]]>. Aqui está um exemplo:

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

Então você pode exibir este html em TextView usando:

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

Se você tiver links em seu html e quiser que eles sejam clicáveis, use este método:

myTextView.setMovementMethod(LinkMovementMethod.getInstance());
Mario Kutlev
fonte
9
Você pode usar HTML sem CDATA se apenas usar em getText()vez de getString(): stackoverflow.com/a/18199543/89818
caw
16
Sim, mas com CDATAo HTML real que você inclui é muito mais fácil - não há necessidade de traduzir todos os <,>, etc. Basta copiar o HTML real e colar em seu string.xml
Richard Le Mesurier
Obrigado, funciona bem. Eu só gostaria de saber como centralizar o texto verticalmente no textview.
Herman
7
selecione o texto para o qual deseja CDATA .. e pressione ctrl + alt + T -> selecione 'Surrounf com seção CDATA'
Prashant Jajal
Desculpe, mas não funciona. A única solução válida que encontrei funcionando com string, u, i e todas as tags com suporte para Html.from é a de wsanville, portanto, use & lt e & gt para abrir e fechar a tag HTML.
Pedro,
27

Aqui está a maioria dos exemplos. Não acho que a pretag seja compatível.

insira a descrição da imagem aqui

Este é o strings.xmlarquivo:

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

Aqui está o layout. Observação para que o link seja realmente clicável, é necessário um pouco de trabalho 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>

Finalmente, o 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
fonte
Graças a Deus, é possível usar & lt; e & gt; Funciona muito bem.
Torsten Ojaperv
6

String.xml pode conter entidades HTML, como:

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

Em seu código: getResources().getString(R.string.hello_world);avaliará para "<span>". Você pode usar este texto formatado em HTML como este:

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

Todo o estilo suportado pelo sistema de recursos XML é explicado na documentação do Android.

Recursos de string: formatação e estilo

Qualquer coisa incluída lá pode ser usada e ativada diretamente TextView. Se você precisar usar mais marcação HTML, você precisará colocar HTML bruto (com caracteres de escape para &lt;,&gt; e outros) no recurso e carregar tudo em um WebView.

Devunwired
fonte
2

Funcionou para mim:

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