Android: html в strings.xml

92

Я хотел бы отобразить, например, этот 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>

Я хочу отобразить его в диалоговом окне, объявив html в ресурсах strings.xml. Как я могу это сделать?

Альберто Альберто
источник

Ответы:

219

Лучший способ добавить исходный код html в strings.xml - использовать <![CDATA[html source code]]>. Вот пример:

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

Затем вы можете отобразить этот html в TextView, используя:

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

Если у вас есть ссылки в вашем html и вы хотите, чтобы они были интерактивными, используйте этот метод:

myTextView.setMovementMethod(LinkMovementMethod.getInstance());
Марио Кутлев
источник
9
Вы можете использовать HTML без CDATA, если просто используете getText()вместо getString(): stackoverflow.com/a/18199543/89818
caw
16
Да, но с CDATAфактическим HTML, который вы включаете, намного проще - не нужно переводить все <,> и т. Д. Просто скопируйте реальный HTML и вставьте в свой strings.xml
Ричард Ле Мезурье
Спасибо, работает хорошо. Я просто хотел бы знать, как центрировать текст по вертикали в текстовом окне.
Герман
7
выберите текст, для которого вы хотите CDATA .. и нажмите ctrl + alt + T -> выберите «Surrounf с разделом CDATA»
Прашант Джаджал
Извините, но это не работает. Единственное допустимое решение, которое я нашел для работы со строкой u, i и всеми поддерживаемыми тегами для Html.from, - это решение из wsanville, поэтому используйте & lt и & gt для открытия и закрытия HTML-тега.
Питер
27

Вот большинство примеров. Я не думаю, что этот preтег поддерживается.

введите описание изображения здесь

Это strings.xmlфайл:

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

Вот макет. Обратите внимание, что для того, чтобы ссылка была интерактивной, потребуется дополнительная работа:

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

Наконец, код:

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
источник
Слава богу, можно использовать & lt; и & gt; Работает очень хорошо.
Торстен Ояперв
6

String.xml может содержать объекты HTML, например:

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

В вашем коде: getResources().getString(R.string.hello_world);будет оценивать "<span>". Вы можете использовать этот текст в формате HTML следующим образом:

TextView helloWorld = (TextView)findViewById(R.id.hello_world);
helloWorld.setText(Html.fromHtml(getString(R.string.hello_world)));
Томас
источник
3

Все стили, поддерживаемые системой ресурсов XML, описаны в документации Android.

Строковые ресурсы: форматирование и стили

Все, что там есть, можно использовать и настраивать непосредственно TextView. Если вам нужно использовать дополнительную HTML разметку, то вам нужно разместить необработанный HTML (с уцелевшими символами &lt;, &gt;и такими) в ресурс и загрузить всю вещь в WebView.

пожертвованный
источник
2

Это сработало для меня:

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

Суйог Гунджал
источник