2012-03-09 15 views
9

क्या एंड्रॉइड में स्ट्रिंग संसाधन का रंग सेट करने के लिए वैसे भी है? मेरा मतलब है, मुझे पता है कि मैं स्ट्रिंग शैली (या सबस्ट्रिंग्स) को बदलने के लिए कुछ एचटीएमएल टैग का उपयोग कर सकता हूं लेकिन रंग बदलने के लिए कोई नहीं मिला है। मैंने पाठ को सेट करने से पहले Html.fromHtml (स्ट्रिंग) में स्ट्रिंग को पार करने जैसे स्ट्रैक ओवरफ्लो पर अन्य समाधान देखे हैं लेकिन मैं इसे स्ट्रिंग संसाधन संपादक में करना चाहता हूं। कोई संभावना है?संसाधन स्ट्रिंग में शब्द रंग बदलें

उत्तर

10

जहाँ तक मुझे पता के रूप में यह संभव नहीं है। मैं रंग बदलने के लिए एक स्पैन करने योग्य स्ट्रिंग का उपयोग करूंगा।

int colorBlue = getResources().getColor(R.color.blue); 
    String text = getString(R.string.text); 
    SpannableString spannable = new SpannableString(text); 
    // here we set the color 
    spannable.setSpan(new ForegroundColorSpan(colorBlue), 0, text.length(), 0); 

स्पैन करने योग्य वास्तव में अच्छा है। आप fontseize और सामान की तरह सोच सेट कर सकते हैं और बस इसे एक टेक्स्ट व्यू में संलग्न कर सकते हैं। लाभ यह है कि आप एक दृश्य में अलग-अलग रंग रख सकते हैं।

संपादित करें: ठीक है, अगर आप केवल रंग सेट करना चाहते हैं तो मेरे ऊपर उल्लिखित समाधान जाने का तरीका है।

+0

मैं देखता हूं, अगर यह जाने का तरीका है तो मैं अपने स्ट्रिंग संसाधनों को कुछ "कोड" के साथ बना सकता हूं ताकि यह पता चल सके कि मैं जिस पदार्थ को बदलना चाहता हूं वह रंग शुरू होता है और समाप्त होता है और जिस तरह से आप उजागर करते हैं उसे संसाधित करते हैं। धन्यवाद। – Notbad

+0

'int colorBlue = getResources()। Getcolor (R.color.blue); .... spannable.setSpan (नई ForegroundColorSpan (colorBlue), 0, text.length(), 0); 'इस' spannable.setSpan (नई ForegroundColorSpan (R.color.blue की तरह एक ही पंक्ति द्वारा प्रतिस्थापित किया जा सकता है)। .' –

+0

इसके अलावा, मैं व्यक्तिगत रूप से झंडा स्थिरांक spannable वर्ग में घोषित बजाय कॉल के दौरान हार्ड-कोड 0 की। का प्रयोग करेंगे। अधिक पठनीय और maintainable कोड के लिए बनाता है बस कुछ है कि मैं क्या करना होगा .. –

1

स्ट्रिंग्स के पास कोई रंग नहीं है, लेकिन आप पाठ में टेक्स्ट के रंग को बदल सकते हैं। वे textview documentation देखें, लेकिन ऐसा करने के 2 तरीके हैं।

एक्सएमएल

android:textColor 

कोड

setTextColor(int) 
+0

उत्तर के लिए धन्यवाद। मुझे लगता है कि यह अच्छी तरह से तैयार नहीं किया गया था। मैंने संसाधन स्ट्रिंग में एक सबस्ट्रिंग का रंग बदलने के लिए प्रस्तुत किया। उसके लिए खेद है। – Notbad

19

ऐसा लगता है कि this विधि काम कर रहा है:

<string name="some_text">this is <font fgcolor="#ffff0000">red</font></string> 
+7

यह काम करना बंद कर दिया है 4.3 (संभवतः पहले) - किसी को पता है कि क्या हो रहा है? –

+5

[यह क्यों काम करना बंद कर दिया] [https://code.google.com/p/android/issues/detail?id=58192), [यह कैसे काम करना बंद कर दिया] (https://github.com/android/platform_frameworks_base/commit/a8f6d5f0720f400b6f59b0809aaefea83c5f51d4), [एक अच्छा वैकल्पिक हल/शामिल कोड: (] (http://stackoverflow.com/a/18839246/253468) और एक बदसूरत वैकल्पिक हल: किसी के लिए '7fffffff' से ऊपर का रंग निम्न लागू होता है:' 'कैलकुलेटर में 'ff6890a5' डालें' (opti औपचारिक रूप से पहले दशमलव में कनवर्ट करें) और हस्ताक्षर फ़्लिप करें, फिर (वैकल्पिक रूप से हेक्सा में कनवर्ट करें) अंतिम 8 हेक्साडेसिमल अंक लें और '' का उपयोग करें। – TWiStErRob

+1

ठीक है, अब ** यह ** खूनी शानदार था। यह पूरी तरह से काम किया। बहुत बहुत धन्यवाद और मेरी इच्छा है कि मैं इस बारे में बहुत समय पहले जानूंगा। –

0

मैं हाल ही में इस समस्या के लिए एक लचीला समाधान कर दिया है। यह मुझे विधि श्रृंखला का उपयोग कर आसानी से एकाधिक शैलियों को जोड़ने के लिए सक्षम बनाता है। यह SpannableString का उपयोग करता है। जब आप एक रंग को एक निश्चित सबस्ट्रिंग देना चाहते हैं, तो आप ForegroundColorSpan का उपयोग कर सकते हैं।

public StyledString putColor(String subString, @ColorRes int colorRes){ 
    if(getStartEnd(subString)){ 
     int color = ColorUtil.getColor(context, colorRes); 
     ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(color); 
     fullStringBuilder.setSpan(foregroundColorSpan, startingIndex, endingIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    } 
    return this; 
} 

पूर्ण कोड के लिए gist देखते हैं।

+0

में काम करता है, जबकि एक लिंक बहुत अच्छा है, कृपया [अपने लिंक (ओं) के संदर्भ प्रदान करें] (http://meta.stackoverflow.com/a/8259/169503), जैसा कि * उत्तर * वास्तव में होना चाहिए एक जवाब। ध्यान रखें कि * किसी बाहरी साइट के लिंक से शायद ही अधिक * होने का एक संभावित कारण है [क्यों और कैसे कुछ उत्तरों हटा दिए गए हैं?] (Http://stackoverflow.com/help/deleted-answers)। – Jan

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