2011-10-26 11 views
22

के बीच परिवर्तित मैं एक स्ट्रिंग संसाधन "foo" कहा जाता है। यह एक साधारण स्ट्रिंग हो सकता है ... या इसमें HTML हो सकता है। यह समय के साथ बदल सकते हैं: मैं इसे के रूप में कम से कम एक SpannableString अप बॉक्स में सक्षम होना चाहिए तुरंत पढ़ने क्या यह HTML या नहीं है पर (लेकिन कैसे ??)एंड्रॉयड: स्ट्रिंग्स, SpannedStrings और Spannablestrings

मुझे लगता है कि कच्चे CharSequence और पहली सक्षम हो प्राप्त करना चाहते हैं इसे प्रदर्शित करने के लिए (सटीक वर्ण, एंड्रॉइड की "व्याख्या" नहीं है)। अभी मैं ऐसा नहीं कर सकता ... toString() उन हिस्सों को तोड़ने का फैसला करता है जो मुझे नहीं लगता कि मैं देखना चाहता हूं।

मैं फिर से कुछ स्पैनिंग या स्पैन करने योग्य स्ट्रिंग्स को किसी विधि (सामान्य कामों में से कोई भी) का उपयोग करके कॉन्सटेनेशन के माध्यम से स्पैन करने योग्य स्ट्रिंग बनाने में सक्षम होना चाहता हूं। मैं उस स्पैनबलस्ट्रिंग का उपयोग टेक्स्टव्यू में HTML- स्वरूपित टेक्स्ट को प्रदर्शित करने के लिए करना चाहता हूं।

यह मुश्किल नहीं होना चाहिए, लेकिन स्पष्ट रूप से मैं यह सही नहीं कर रहा हूँ (वहाँ बहुत कम जानकारी वहाँ इस बारे में है कि मैं अब तक मिल गया है है)। निश्चित रूप से रास्ते में मार्कअप खोए बिना स्ट्रिंग्स, स्पैनस्डट्रिंग्स और यहां तक ​​कि स्पैनब्लेस्टेरिंग्स के बीच सटीक रूप से इंटरकवर्ट करने का एक तरीका है?

ध्यान दें कि मैं पहले से ही कुछ हद तक टूटा Linkify साथ खेला है, लेकिन मैं (आदि कोई झूलने अस्वरूपित "/" है, उचित hrefs,) प्रक्रिया पर बेहतर नियंत्रण मैं यह सब प्राप्त कर सकते हैं काम करना चाहता हूँ मैं सभी चरणों में एचटीएमएल में रहें, हालांकि मैं कुछ भी संयोजित नहीं कर सकता।

संपादित करें 1: मैं मैं हमेशा मैं अपने कच्चे स्ट्रिंग (जो कुछ भी करने के बजाय एंड्रॉयड यह CharSequence सोचता है कि वास्तव में है फैसला करता है) सुनिश्चित करने के लिए निम्न का उपयोग कर सकते सीखा है। अच्छा ... अब, इसे स्पैन करने योग्य स्ट्रिंग में कैसे संयोजित करें?

<string name="foo"><![CDATA[ 
    <b>Some bold</b> 
]]> 
</string> 

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

String foo1 = (String)getResources().getText(R.string.foo1); 
String foo2 = (String)getResources().getText(R.string.foo2); 
SpannedString bar = new SpannedString(Html.fromHtml(foo1+foo2)); 
: सुनिश्चित नहीं क्यों यह पहले काम नहीं किया है, लेकिन ... अगर foo1 और foo2 तार अप चिह्नित कर रहे हैं के रूप में ऊपर (CDATA के रूप में), तो एक जाहिरा तौर पर ऐसा कर सकते हैं

जिज्ञासु: इस की तुलना में एक और अधिक सरल समाधान है? क्या यह सीडीएटीए व्यवसाय वास्तव में आवश्यक है? यह दृढ़ लगता है (लेकिन कभी भी यह नहीं जानता कि संसाधन का प्रकार क्या होगा ... स्ट्रिंग, स्पैन करने योग्य, आदि)

+1

ऐसा लगता है कि आपने यहां अपने स्वयं के प्रश्न का उत्तर दिया है। आपका foo1, ऊपर foo2 उदाहरण ठीक लगता है। यदि आपके पास कोई अन्य ठोस सवाल नहीं है तो आपको अपने प्रश्न का उत्तर देना चाहिए ताकि इसे अनुत्तरित अनुभाग से हटा दिया जा सके। XML में HTML को एम्बेड करने के लिए सीडीएटीए आवश्यक है क्योंकि अन्यथा HTML तत्व संलग्न एक्सएमएल से अलग नहीं होंगे। –

उत्तर

1

ऐसा प्रतीत होता है कि इसे पूरा करने के लिए एक और अधिक सरल तरीका नहीं है।

1

मुझे एक ही समस्या थी। Google API Guides के अनुसार दो समाधान हैं।

पहले स्ट्रिंग संसाधन में &lt; साथ < निशान से बचने के लिए है। दुर्भाग्यवश, String रूपांतरण पृष्ठभूमि में टैग को हटा देता है।

दूसरा XML/HTML टैग के बजाय स्वरूप स्ट्रिंग्स उपयोग करने के लिए है। यह सरल, तेज़, और छुपा रूपांतरण समस्याओं से बचता है। getString(resource, ...) यहां printf(string, ...) जैसा काम करता है।

दोनों काम करते हैं और स्ट्रिंग के दिए गए हिस्से को किसी भी तरह से बदलने के लिए कुछ कोड की आवश्यकता होती है (टैग या प्रारूप तारों को संभाल लें)। का आनंद लें! =)

संबंधित मुद्दे