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. Як я можу це зробити?


Відповіді:


218

Найкращий спосіб додати вихідний код 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 with CDATA section"
Prashant Jajal

Вибачте, але це не працює. Єдиним дійсним рішенням, яке я знайшов, працює з рядком u, i, 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)));

Слава Богу, що можна використовувати & 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>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.