XML में HTML- स्वरूपित स्ट्रिंग संसाधन से टेक्स्ट व्यू टेक्स्ट सेट करें




android formatting (4)

मेरे पास स्ट्रिंग्स.एक्सएमएल के अंदर कुछ निश्चित तार हैं, जैसे कुछ:

<resources>
    <string name="somestring">
        <B>Title</B><BR/>
        Content
    </string>
</resources>

और मेरे लेआउट में मुझे एक TextView मिला है जिसे मैं TextView स्वरूपित स्ट्रिंग से भरना चाहता हूं।

<TextView android:id="@+id/formattedtext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/htmlstring"/>

अगर मैं ऐसा करता हूं, तो formattedtext की सामग्री किसी भी एचटीएमएल टैग से छीनने वाले somestring की सामग्री है और इस प्रकार unformatted।

मुझे पता है कि प्रारूपित पाठ को प्रोग्रामेटिक रूप से सेट करना संभव है

.setText(Html.fromHtml(somestring));

क्योंकि मैं इसे अपने कार्यक्रम के अन्य हिस्सों में उपयोग करता हूं जहां यह अपेक्षित काम कर रहा है।

इस फ़ंक्शन को कॉल करने के लिए मुझे एक Activity आवश्यकता है, लेकिन फिलहाल मेरा लेआउट सादे एक्सएमएल में एक साधारण या कम स्थिर दृश्य है और मैं इसे इस तरह से छोड़ना पसंद करूंगा, मुझे Activity बनाने के ऊपरी हिस्से से बचाने के लिए कुछ पाठ सेट करें।

क्या मैं कुछ स्पष्ट दिख रहा हूं? क्या यह बिल्कुल संभव नहीं है? किसी भी मदद या कामकाज का स्वागत है!

संपादित करें: बस कुछ चीजों की कोशिश की और ऐसा लगता है कि एक्सएमएल में एचटीएमएल स्वरूपण में कुछ बाधाएं हैं:

  • टैग लोअरकेस लिखा जाना चाहिए

  • here वर्णित कुछ टैग काम नहीं करते हैं, उदाहरण के लिए <br/> (इसके बजाय \n का उपयोग करना संभव है)


अगर किसी को यह पता चलता है, तो एक अच्छा विकल्प है जिसे दस्तावेज नहीं किया गया है (मैंने घंटों की खोज के बाद इसे पार किया, और अंत में इसे एंड्रॉइड एसडीके के लिए बग सूची में पाया)। जब तक आप इसे लपेटते हैं, तब तक आप स्ट्रिंग्स.एक्सएमएल में कच्चे HTML को शामिल कर सकते हैं

<![CDATA[ ...raw html... ]]>

उदाहरण:

<string name="nice_html">
<![CDATA[
<p>This is a html-formatted string with <b>bold</b> and <i>italic</i> text</p>
<p>This is another paragraph of the same string.</p>
]]>
</string>

फिर, आपके कोड में:

TextView foo = (TextView)findViewById(R.id.foo);
foo.setText(Html.fromHtml(getString(R.string.nice_html)));

आईएमएचओ, यह काम करने के लिए परिमाण nicer के कई आदेश है :-)


अपने एचटीएमएल टैग से बचें ...

<resources>
    <string name="somestring">
        &lt;B&gt;Title&lt;/B&gt;&lt;BR/&gt;
        Content
    </string>
</resources>

मेरे पास एक और मामला है जब मुझे सीडीएटीए को एक्सएमएल में डालने का कोई मौका नहीं है क्योंकि मुझे सर्वर से स्ट्रिंग एचटीएमएल मिलता है।

यहां एक सर्वर से मुझे मिलता है:

<p>The quick brown&nbsp;<br />
fox jumps&nbsp;<br />
 over the lazy dog<br />
</p>

ऐसा लगता है कि यह अधिक जटिल है लेकिन समाधान बहुत आसान है।

private TextView textView;

protected void onCreate(Bundle savedInstanceState) { 
.....
textView = (TextView) findViewById(R.id.text); //need to define in your layout
String htmlFromServer = getHTMLContentFromAServer(); 
textView.setText(Html.fromHtml(htmlFromServer).toString());

}

आशा करता हूँ की ये काम करेगा!
Linh


चूंकि यहां का शीर्ष उत्तर कुछ गलत (या कम से कम जटिल) का सुझाव दे रहा है, मुझे लगता है कि इसे अद्यतन किया जाना चाहिए, हालांकि सवाल काफी पुराना है:

एंड्रॉइड में स्ट्रिंग संसाधनों का उपयोग करते समय, आपको जावा कोड से getString(...) को कॉल करना होगा या अपने लेआउट एक्सएमएल में android:text="@string/..." का उपयोग करना होगा।

भले ही आप अपने स्ट्रिंग्स में एचटीएमएल मार्कअप का उपयोग करना चाहते हैं, आपको बहुत कुछ बदलना नहीं है:

आपके स्ट्रिंग संसाधनों में भागने के लिए आपको केवल एक ही वर्ण हैं:

  • डबल उद्धरण चिह्न: " बन जाता है \"
  • एकल उद्धरण चिह्न: ' बन जाता है \'
  • ampersand: & बन जाता है &#38; या &amp;

इसका मतलब है कि आप टैग से बचने के बिना अपना HTML मार्कअप जोड़ सकते हैं:

<string name="my_string"><b>Hello World!</b> This is an example.</string>

हालांकि, सुनिश्चित करने के लिए, आपको केवल <b> , <i> और <u> उपयोग करना चाहिए क्योंकि वे दस्तावेज़ में सूचीबद्ध हैं।

यदि आप एक्सएमएल से अपने एचटीएमएल स्ट्रिंग्स का उपयोग करना चाहते हैं, तो बस android:text="@string/..." का उपयोग करना जारी रखें android:text="@string/..." , यह ठीक काम करेगा।

केवल अंतर यह है कि, यदि आप जावा कोड से अपने एचटीएमएल स्ट्रिंग का उपयोग करना चाहते हैं, तो आपको getString(...) बजाय getString(...) , जैसा कि पूर्व शैली रखता है और बाद वाला बस स्ट्रिप करेगा यह बंद।

यह उतना आसान है जितना। कोई Html.fromHtml(...) नहीं, कोई Html.fromHtml(...)

यदि आपको HTML मार्कअप में अपने विशेष वर्णों को एन्कोड किया गया है तो आपको केवल Html.fromHtml(...) आवश्यकता होगी। getString(...) साथ इसका प्रयोग करें। यदि आप स्ट्रिंग को String.format(...) पास करना चाहते हैं तो यह आवश्यक हो सकता है।

यह सब दस्तावेज़ों में भी वर्णित है

संपादित करें:

Html.fromHtml(...) एचटीएमएल (जैसा कि मैंने प्रस्तावित किया है) या Html.fromHtml(...) अनुभाग और एचटीएमएल.फ्रेम एचटीएमएल getText(...) साथ Html.fromHtml(...) बीच कोई अंतर नहीं है।

तुलना के लिए निम्नलिखित ग्राफिक देखें:







textview