Android: html w strings.xml

92

Chciałbym wyświetlić na przykład ten kod 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>

Chcę wyświetlić go w oknie dialogowym, deklarując kod HTML w zasobach strings.xml. Jak mogę to zrobić?

Alberto Alberto
źródło

Odpowiedzi:

219

Najlepszym sposobem na dodanie kodu źródłowego HTML w strings.xml jest użycie <![CDATA[html source code]]>. Oto przykład:

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

Następnie możesz wyświetlić ten kod HTML w TextView za pomocą:

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

Jeśli masz linki w swoim html i chcesz, aby były klikalne, użyj tej metody:

myTextView.setMovementMethod(LinkMovementMethod.getInstance());
Mario Kutlev
źródło
9
Możesz użyć HTML bez CDATA, jeśli użyjesz getText()zamiast getString(): stackoverflow.com/a/18199543/89818
caw
16
Tak, ale z CDATAfaktycznym załączonym kodem HTML jest znacznie łatwiej - nie trzeba tłumaczyć wszystkich <,> itp. Po prostu skopiuj prawdziwy kod HTML i wklej do swojego strings.xml
Richard Le Mesurier
Dzięki, działa dobrze. Chciałbym tylko wiedzieć, jak wyśrodkować tekst w pionie w widoku tekstu.
Herman
7
wybierz tekst, dla którego chcesz CDATA .. i naciśnij ctrl + alt + T -> wybierz „Surrounf with CDATA section”
Prashant Jajal
Przepraszamy, ale to nie działa. Jedynym prawidłowym rozwiązaniem, które znalazłem działającym ze stringami, u, i i wszystkimi obsługiwanymi tagami dla Html.from, jest to z wsanville, więc użyj & lt i & gt do otwierania i zamykania tagu HTML.
Peter,
27

Oto większość przykładów. Myślę, że pretag nie jest obsługiwany.

wprowadź opis obrazu tutaj

To jest strings.xmlplik:

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

Oto układ. Uwaga, aby link faktycznie był klikalny, potrzeba trochę więcej pracy:

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

Na koniec kod:

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
źródło
Dzięki Bogu można użyć & lt; i & gt; Działa bardzo dobrze.
Torsten Ojaperv
6

String.xml może zawierać encje HTML, takie jak:

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

W twoim kodzie: getResources().getString(R.string.hello_world);oceni do "<span>". Możesz użyć tego sformatowanego tekstu HTML w następujący sposób:

TextView helloWorld = (TextView)findViewById(R.id.hello_world);
helloWorld.setText(Html.fromHtml(getString(R.string.hello_world)));
Tomasz
źródło
3

Wszystkie style obsługiwane przez system zasobów XML są wyjaśnione w dokumentacji systemu Android.

Zasoby tekstowe: formatowanie i stylizacja

Wszystko, co tam jest, może być używane i ustawiane bezpośrednio TextView. Jeśli trzeba użyć dalszych znaczników HTML, trzeba będzie postawić surowe HTML (ze zbiegłych znaków &lt;, &gt;i takie tam) do zasobu i załadować całą rzecz w sposób WebView.

devunwired
źródło
2

To zadziałało dla mnie:

<?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
źródło